我有以下htaccess:
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9]+)\.html$ /$1 [R=301,L,NE]
RewriteCond %{THE_REQUEST} \s/+index\.php\?s=([^\s&]+) [NC]
RewriteRule ^ %1? [L,R=301,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+?)/?$ index.php?s=$1 [L,QSA]
这会将我的所有查询(例如mysite.com/index.php?s=example)更改为mysite.com/example。多数民众赞成在那里。我的站点地图页面出现问题。当您输入此地址mysite.com/sitemap而不是将您重定向到mysite.com/index.php?s=sitemap时,它会显示我的sitemap.xml文件,该文件位于我的目录root中。
如何阻止这种情况发生?
谢谢。
答案 0 :(得分:1)
您似乎需要在此处停用MultiViews
。选项MultiViews
由Apache's content negotiation module
使用,>> mod_rewrite
之前运行,并使Apache服务器匹配文件扩展名。因此/sitemap
可以在网址中,但它会投放/sitemap.xml
。
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9]+)\.html$ /$1 [R=301,L,NE]
RewriteCond %{THE_REQUEST} \s/+index\.php\?s=([^\s&]+) [NC]
RewriteRule ^ %1? [L,R=301,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.+?)/?$ index.php?s=$1 [L,QSA]