![](/img/trans.png)
[英]How to remove extension from url WITHOUT trailing slash using .htaccess?
[英]Remove Trailing Slash from Specific URL using 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/等
因为尾部的斜杠是查询字符串的一部分,所以您不能只重写它,因此必须提取减去最后一个/
的查询字符串,然后重定向到附加了该匹配项的页面。
为此,您需要将RewriteCond中的模式与%1
匹配(请参阅此答案以供参考),并将其附加到%{REQUEST_URI}
(从而删除原始查询字符串)中,如下所示:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)/$
RewriteRule ^.*$ %{REQUEST_URI}?%1 [L,R=301]
RewriteCond %{QUERY_STRING} ^(.*)/$
< -确保你已经得到了/
在这里到底在你的条件-它确保只有结尾查询字符串/
重定向,所以你不结束一个可怕的递归循环。
您可以尝试以下方法:
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/
我建议尝试先找出为什么在后面加上斜杠。 正如CD001在评论中所说,这可能是您的PHP代码做错了什么。
但是,如果您确实需要htaccess解决方案来删除斜杠,那么以下内容将为您工作。
RewriteCond %{QUERY_STRING} ^(.*)/$
RewriteRule ^(.*)$ ?%1 [L,R=301]
这已经在http://htaccess.madewithlove.be/上进行了测试,适用于您的示例URL。
如果您的意思是内部例程
RewriteCond %{QUERY_STRING} ^(checkout\=[^\&\s]+\&id\=\d+\&item_options\[price_id\]\=\d+)\/
RewriteRule ^ %{REQUEST_FILENAME}?%1 [L]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.