我的网站上有两种链接:第一种是使用.html完成,第二种是以/结尾(斜线,如果文件名没有以.html结尾)。
某些重写规则的原因,如果文件不是.html,并且如果添加/最后,则URL未正确重写。
像:
可以使用链接:http://mysite.com/cars/fast-cars
但链接不正确:http://mysite.com/cars/fast-cars/
所以,我需要的是,当网址使用/
而非(.html/
)结束时,要重定向到同一页面,而不是/
,或者在这种情况下:< / p>
http://mysite.com/cars/fast-cars/
被重定向到http://mysite.com/cars/fast-cars
。
希望我很清楚,你可以帮我解决那个htaccess规则。提前谢谢。
更新:我确实找到了解决方案的一部分:.htaccess with or without slash。
但是,我的规则也不应该对某些子目录(如目录管理员,订单等)有效。可以用相同的规则定义吗?
更新2:我的规则如下:
RewriteRule ^cars/fast-cars$ /seopage.php?marker=fast-cars$1
此外,尝试使用有效的规则:
RewriteRule (.*)/$ $1 [L,R=301]
但是某些目录(即管理员,订单等)必须绕过该规则。
答案 0 :(得分:5)
您可以通过几种方式完成此操作(选择最适合您的方式)。
1)删除不存在的文件和文件夹的尾部斜杠/
:
# remove trailing slash for non-existing files and folders
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
2)删除带有例外的尾部斜杠/
# remove trailing slash except some folders
RewriteCond %{REQUEST_URI} !^/(admin|orders)
RewriteRule ^(.*)/$ $1 [L,R=301]
3)你甚至可以将它们组合在一起(这可能太多了):
RewriteCond %{REQUEST_URI} !^/(admin|orders)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
另外,请考虑在顶部的某处添加此指令 - documentation:
DirectorySlash Off