1

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

简而言之,我正在尝试:

1) 删除 urls 中的 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. 但这不是我要重定向的意图,我只需要重写它。

请指教.. :)

4

1 回答 1

1

试试这个:

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

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

如果你有 FastCGI 实现,你需要在重写规则中添加一个问号:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L]
于 2012-12-03T09:24:21.753 回答