所以我正在使用.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
。但这不是我打算重定向的,我只需要重写它。
请告知.. :)
答案 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]