使用HTACCESS从特定URL删除尾随斜杠

时间:2014-05-30 09:17:06

标签: php .htaccess

如何使用htaccess强制从特定网址中删除尾部斜杠,

例如:

https://blahblah.com/checkout/?checkout=add_to_cart&id=17&item_options[price_id]=1/

https://blahblah.com/checkout/?checkout=add_to_cart&id=17&item_options[price_id]=1

并忽略其他网址,例如https://blahblah.com/about/https://blahblah.com/contact/

4 个答案:

答案 0 :(得分:1)

因为尾部斜杠是查询字符串的一部分,你不能只重写它,你必须提取查询字符串减去最后的/,然后重定向到你所依赖的页面。匹配附加。

要执行此操作,您需要将RewriteCond中的模式与%1匹配(请参阅this answer以供参考)并将其附加到%{REQUEST_URI}(从而删除原始查询字符串) - 像这样:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)/$
RewriteRule ^.*$ %{REQUEST_URI}?%1 [L,R=301]

RewriteCond %{QUERY_STRING} ^(.*)/$< - 确保您在条件结尾处获得了/ - 它确保仅重定向以/结尾的查询字符串,你不会在一个可怕的递归循环中结束。

答案 1 :(得分:0)

你可以试试这个:

RewriteCond %{QUERY_STRING} (.*)/$
RewriteRule ^(.*)$ /$1?%1 [L,R=301]

这将仅重定向包含查询字符串的每个请求。在你的情况下:

checkout/?checkout=add_to_cart&id=17&item_options[price_id]=1/

checkout/?checkout=add_to_cart&id=17&item_options[price_id]=1

但不是https://blahblah.com/about/https://blahblah.com/contact/

答案 2 :(得分:0)

我建议尝试找出为什么首先开始使用尾随斜杠。正如CD001在评论中所说,可能是你的PHP代码做错了。

但是,如果您确实需要htaccess解决方案来删除斜杠,那么以下内容应该对您有用。

RewriteCond %{QUERY_STRING} ^(.*)/$
RewriteRule ^(.*)$ ?%1 [L,R=301]

此问题已在http://htaccess.madewithlove.be/进行了测试,适用于您的示例网址。

答案 3 :(得分:0)

如果你的意思是内部例程

RewriteCond %{QUERY_STRING} ^(checkout\=[^\&\s]+\&id\=\d+\&item_options\[price_id\]\=\d+)\/
RewriteRule ^ %{REQUEST_FILENAME}?%1 [L]