如何使用.htaccess重写URL,移除路径末尾斜杠(含参数场景)
移除URL末尾斜杠的.htaccess规则实现
你的需求是移除路径后的末尾斜杠,同时完整保留查询参数,以下是可行的解决方案:
正确的.htaccess规则
在你的.htaccess文件中添加以下规则(如果已有RewriteEngine On,则无需重复添加):
RewriteEngine On # 移除末尾斜杠(排除真实文件和目录) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ $1 [L,R=301,QSA] # 你的原有规则(给无后缀URL添加.php,可保留) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^\.]+)$ $1.php [NC,L]
规则说明
RewriteRule ^(.*)/$ $1 [L,R=301,QSA]:匹配所有末尾带斜杠的请求,将其重写为不带斜杠的路径;QSA参数确保查询字符串(如?sku=23456&qty=3)被完整保留;R=301表示永久重定向,利于SEO。- 前置的两个
RewriteCond是为了排除真实存在的文件和目录,避免影响正常的文件访问。
效果验证
应用规则后,你的示例URL会按预期转换:
- 原URL:
www.example.com/test/?sku=23456&qty=3→ 目标URL:www.example.com/test?sku=23456&qty=3 - 原URL:
www.example.com/page2/?page=3&emp=543→ 目标URL:www.example.com/page2?page=3&emp=543 - 原URL:
www.example.com/stream/?start=4&id=tdfcs45s&q=sat→ 目标URL:www.example.com/stream?start=4&id=tdfcs45s&q=sat
原有规则无效原因
你之前使用的规则是给无后缀的请求自动添加.php后缀,和移除末尾斜杠的需求完全无关,因此无法实现你的目标。
内容的提问来源于stack exchange,提问作者user20268089
相关产品推荐
相关产品推荐

