You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改mod_rewrite规则:URL末尾加斜杠但含等号时除外

条件化添加URL末尾斜杠的.htaccess规则修改方案

问题场景

当前使用以下规则强制给URL末尾添加斜杠:

#append slash at end of URLs
RewriteCond %{REQUEST_URI} !(/$|\.|^$)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]

但遇到包含=(模拟查询字符串结构)的URL时会错误添加斜杠,比如生成https://www.mywebsite.com/regular/path/page=22/,需要调整规则,仅当**浏览器可见URL中不含=**时才添加末尾斜杠,正确结果应为https://www.mywebsite.com/regular/path/page=22。

补充背景:实际项目中用了友好URL重写,将查询字符串映射为路径形式,规则如下:

RewriteRule ^([A-Za-z]+)/([A-Za-z\-]+)/([A-Za-z0-9]+)/(.+)  /$2.php?CustomerSlug=$1&action=$3&$4 [NC,L]

由于后台始终存在查询字符串,必须通过%{THE_REQUEST}判断用户可见的原始URL内容,预期的正确URL格式如下:

  • https://www.mywebsite.com/CustomerSlug/Php-File-Name/action/filter=all&value=4&color=blue(末尾无斜杠)
  • https://www.mywebsite.com/CustomerSlug/Php-File-Name/action/filter=all(末尾无斜杠)
  • https://www.mywebsite.com/CustomerSlug/Php-File-Name/action/(末尾有斜杠)
  • https://www.mywebsite.com/CustomerSlug/Php-File-Name/(末尾有斜杠)
  • https://www.mywebsite.com/CustomerSlug/(末尾有斜杠)
  • https://www.mywebsite.com/(末尾有斜杠)

修改后的规则

替换原有规则为以下内容:

# 仅当可见URL不含=且未以斜杠/点结尾时,添加末尾斜杠
RewriteCond %{THE_REQUEST} !\=
RewriteCond %{REQUEST_URI} !(/$|\.|^$)
RewriteRule (.*) %{REQUEST_URI}/ [R=301,L]

规则解释

  1. RewriteCond %{THE_REQUEST} !\=:%{THE_REQUEST}存储的是用户浏览器地址栏中实际输入的原始请求URL,这个条件会跳过所有包含=的URL,避免给带查询字符串结构的路径添加斜杠。
  2. 保留原条件RewriteCond %{REQUEST_URI} !(/$|\.|^$):排除已以斜杠结尾、包含文件扩展名(如.php/.html)或空请求的情况,防止不必要的重写操作。

内容的提问来源于stack exchange,提问作者techtheatre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:00:07