codeigniter .htaccess网址问题

时间:2012-09-08 13:30:50

标签: php .htaccess codeigniter

我想这样做:(首先,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页面。

1 个答案:

答案 0 :(得分: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]