301重定向也被重写的URL

时间:2015-06-25 23:29:06

标签: php .htaccess mod-rewrite redirect slim

我正在使用Slim构建一个网站,它建议使用以下.htaccess代码来创建漂亮的网址:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

这意味着http://example.com/account/login之类的网址将为http://example.com/index.php/account/login 别名,然后由我的前端控制器进行处理。到目前为止一切都很好。

但是,如果有人明确导航到

http://example.com/index.php/account/login

我希望首先重定向

http://example.com/account/login

然后

的别名

http://example.com/index.php/account/login

这样,用户就会在导航栏中看到http://example.com/account/login

如何在.htaccess中同时处理这两个规则,最重要的是,如果不对http://example.com中的主机和域(.htaccess)进行硬编码?

这也可以在子目录中使用,例如:

http://example.com/site1/index.php/account/login - > http://example.com/site1/account/login

.htaccess文件位于site1目录中,相对于文档根目录,而无需在site1中明确放置.htaccess

2 个答案:

答案 0 :(得分:2)

您需要在此规则之前使用新的重定向规则:

RewriteEngine On

RewriteCond $0#%{REQUEST_URI} ^([^#]*)#(.*)\1$
RewriteRule ^.*$ - [E=BASE:%2]

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^index\.php(?:/(.*))?$ %{ENV:BASE}$1 [L,R=302,NC,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]

答案 1 :(得分:1)

试试这个:

RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]

RewriteCond%{REQUEST_FILENAME}!-f

RewriteRule ^ index.php [QSA,L]