我网站中的动态网页配置了以下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]
答案 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
,这样您就不会重写循环。清除浏览器缓存以进行测试。