从/index.php重定向到/不工作

时间:2016-12-29 06:42:57

标签: regex apache .htaccess redirect mod-rewrite

我网站中的动态网页配置了以下htaccess规则:

# Dynamic Pages
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

因此页面将从

重定向
http://example.com/?url=testpage

http://example.com/testpage/

但我也想将/index.php重定向到/(root)。所以当有人进入时

http://example.com/index.php

在浏览器地址栏中,它应该转到

http://example.com/

为实现这一目标,我尝试了以下规则:

#index.php to /
RewriteRule ^index\.php$ / [R=301]

虽然这很好但是它影响了我以前的htaccess规则。以及以下网址

http://example.com/testpage/

自动成为

http://example.com/?url=testpage

当我删除此规则时,之前的动态网页规则正常工作。如何在我的htaccess文件中保留这两个规则而不会相互冲突?

我完整的.htaccess文件是:

Options +FollowSymlinks -MultiViews

#Enable mod rewrite
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d

# Dynamic Pages
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

# index.php to /
RewriteRule ^index\.php$ / [R=301]

1 个答案:

答案 0 :(得分:1)

您可以使用以下规则:

Options +FollowSymlinks -MultiViews

#Enable mod rewrite
RewriteEngine On

# index.php to /
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteCond %{REQUEST_URI} ^(.*/)index\.php$ [NC]
RewriteRule ^ %1 [L,R=301,NE]

# Dynamic Pages
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?url=$0 [QSA,L]

重要的是在第一条规则中使用THE_REQUEST,这样您就不会重写循环。清除浏览器缓存以进行测试。