htaccess问题导致内部服务器错误重定向过多

时间:2012-12-03 09:17:14

标签: apache .htaccess codeigniter mod-rewrite

所以我正在使用.htaccess在我的codeigniter应用程序中使用干净的URL。

简而言之,我想:

1)删除url中的index.php(重定向永久)

http://localhost/directory/index.php*
to
http://localhost/directory/*

http://my.domain.com/index.php*
to
http://my.domain.com/*

2)将某些控制器的请求重写为index.php / [controller_name]

http://localhost/directory/controller1* 
to 
http://localhost/directory/index.php/controller1*

http://my.domain.com/controller2* 
to 
http://my.domain.com/index.php/controller2*

我的htaccess文件目前是这样的:

Options +FollowSymlinks

RewriteEngine On
#RewriteBase /

# Redirect index.php 
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule ^(.*)index\.php((/)(.*))?$ /$1/$4 [R=301,L]

第一期

这对http://localhost/dir/index.php/controller1无效。 而是重定向到http://localhost/dir/controller1,重定向到http://localhost//controller1$1返回空字符串?)

# Rewrite CI certain controllers
RewriteCond %{THE_REQUEST} directory/(home|other_controller) [NC]
RewriteRule ^(.*)(home|other_controller)(.*)$ /$1index.php/$2$3 [NC,L]

第二期

这对http://localhost/dir/home无效,导致内部服务器错误(重定向过多)。 但如果我测试添加的R=301代码,则会成功重定向到http://localhost/dir/index.php/home。但这不是我打算重定向的,我只需要重写它。

请告知.. :)

1 个答案:

答案 0 :(得分:1)

试试这个:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L]

您可以将它放在bootstrap文件(index.php)所在的目录中。

如果您有FastCGI实施,则需要在重写规则中添加问号:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L]