1

我想这样做:(首先,ci 是我的 codeigniter 文件夹)
如果用户调用 ci/2012.htm 我想重定向 ci/oyna/oyun/2012.htm 我正在尝试使用它,但它没有运行。

    RewriteEngine on
    RewriteCond $1 !^(index\.php|resources|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    RewriteRule ^(.*)$ index.php/oyna/oyun/$1 [L,QSA]

当我调用 ci/2012.htm 时,它返回 codeigniter 404 not found 页面。

4

1 回答 1

1

第一的; 你有两个重写规则与你正在做的重写冲突;

RewriteRule ^(.*)$ index.php/$1 [L,QSA]
RewriteRule ^(.*)$ index.php/oyna/oyun/$1 [L,QSA]

L标志表示如果规则匹配,则不会使用下一个规则。由于2012.htm匹配第一条规则(两条规则都匹配所有内容),它将被重写index.php/2012.htm并停在那里,甚至不会进入您的 oyna/oyun 重写。

解决方案是交换规则并使 .htm 重写更具体,因此它只重写 .htm 文件。将规则更改为;

RewriteRule ^(.*\.htm)$ index.php/oyna/oyun/$1 [L,QSA]

应该工作得更好。

结果,在把最具选择性的规则放在第一位之后,应该看起来像(未经测试,这里没有 apache)

编辑:添加了缺少的 RewriteCond,每个 RewriteRule 都需要一个

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*\.htm)$ index.php/oyna/oyun/$1 [L,QSA]
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
于 2012-09-08T14:31:05.537 回答