重写.htaccess的规则,最后用斜杠

时间:2011-07-15 12:23:57

标签: apache .htaccess mod-rewrite

我的网站上有两种链接:第一种是使用.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]

但是某些目录(即管理员,订单等)必须绕过该规则。

1 个答案:

答案 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