重定向* .php以清除URL

时间:2010-02-15 16:50:12

标签: php .htaccess mod-rewrite codeigniter

我的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”获取回溯。

4 个答案:

答案 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]