我的htaccess不太有效:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L]
RewriteRule ^(.*)$ /blah/index.php/$1 [L]
基本上/blah/about.php应该重定向到/ blah / about
我正在使用codeigniter,因此需要最后一行来处理URL。
重定向工作正常,但我在/ blah / about
中收到内部服务器错误**编辑 - 错误日志:
由于可能的配置错误,请求超出了10个内部重定向的限制。如有必要,使用'LimitInternalRecursion'增加限制。使用“LogLevel debug”获取回溯。
答案 0 :(得分:2)
我认为您只需将最后一行更改为:
RewriteRule ^(.*)$ /blah/index.php?/$1 [L]
我对CodeIgniter没有具体经验,但通常框架希望通过中央控制器(index.php)推送所有请求,然后从那里解析请求的URL。
编辑:刚刚使用此处的示例更新了我的答案:http://codeigniter.com/wiki/mod_rewrite/,这应该是CodeIgniter想要它的方式。
更新:你可能应该为第二个RewriteRule重复你的RewriteConds,它们只适用于第一个:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blah/index.php/$1 [L]
答案 1 :(得分:1)
感谢@Cryo的帮助,这就是修复:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.php$ /blah/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blah/index.php/$1 [L]
答案 2 :(得分:0)
怎么样:
RewriteRule ^(.*)(\.php)?$ /blah/index.php/$1 [L]
并删除上一行。
还要确保/blah/about.php
不存在。
答案 3 :(得分:-1)
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)\$ $1.php [NC]