use*_*003 2 apache .htaccess mod-rewrite
我的网站上有两种链接:第一种是使用.html完成,第二种是以/结尾(斜线,如果文件名没有以.html结尾).
一些重写规则的原因,在文件不是.html的情况下,如果添加/在最后,URL没有被正确地重写.
喜欢:
链接没问题: http://mysite.com/cars/fast-cars
但链接不好 http://mysite.com/cars/fast-cars/
所以,我需要的是当URL完成时而/
不是(.html/
),重定向到同一页面,没有/
,或者在这种情况下:
http://mysite.com/cars/fast-cars/
被重定向到http://mysite.com/cars/fast-cars
.
希望我很清楚,你可以帮我解决那个htaccess规则.先感谢您.
更新:我确实找到了解决方案的一部分:.htaccess有或没有斜线.
但是,我的规则也不应该对某些子目录(如目录管理员,订单等)有效.可以用同样的规则来定义吗?
更新2:我有以下规则:
RewriteRule ^cars/fast-cars$ /seopage.php?marker=fast-cars$1
Run Code Online (Sandbox Code Playgroud)
此外,尝试使用的规则:
RewriteRule (.*)/$ $1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
但是对于某些目录(即管理员,订单等),必须绕过该规则.
您可以通过几种方式完成此操作(选择最适合您的方式).
1)删除/
不存在的文件和文件夹的尾部斜杠:
# remove trailing slash for non-existing files and folders
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
2)删除尾部斜杠/
,但有例外
# remove trailing slash except some folders
RewriteCond %{REQUEST_URI} !^/(admin|orders)
RewriteRule ^(.*)/$ $1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
3)你甚至可以将它们组合在一起(这可能太多了):
RewriteCond %{REQUEST_URI} !^/(admin|orders)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)
另外,考虑在顶部的某处添加此指令 - 文档:
DirectorySlash Off
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2480 次 |
最近记录: |