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

Apache Rewrite规则问题:移除PHP扩展名并获取查询字符串

修复Apache Rewrite规则以保留查询字符串

你的核心问题是重写规则未明确确保查询字符串传递到目标PHP文件,调整规则并添加QSA(Query String Append)标志即可解决,同时可兼顾带/不带尾部斜杠的URL需求。

调整后的.htaccess配置

RewriteEngine On

# 外部重定向:移除.php扩展名,将 /test.php?lang=en 重定向到 /test/,保留查询参数
RewriteCond %{THE_REQUEST} \s/+(.+?)\.php(\?.*)?\s [NC]
RewriteRule ^ /%1/ [R=307,NE,QSA,L]

# 可选:强制为非文件请求添加尾部斜杠(不需要可直接删除此段)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [R=307,NE,QSA,L]

# 内部重写:带尾部斜杠的URL映射到对应.php文件,保留查询参数
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)/$ $1.php [QSA,L]

# 内部重写:不带尾部斜杠的URL映射到对应.php文件,保留查询参数
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [QSA,L]

关键修改点

  1. 添加QSA标志:在所有重定向和内部重写规则中加入QSA,确保查询字符串被完整传递到目标PHP文件,$_GET['lang']、$_GET['id']等参数可正常捕获。
  2. 扩展重定向规则的正则匹配:让第一条规则能正确识别带查询字符串的.php请求,避免参数丢失。
  3. 支持无尾部斜杠的URL:新增内部重写规则,直接处理/test?lang=en这类格式的请求,无需强制跳转,满足“尾部斜杠可省略”的需求。

测试验证

  • 访问https://example.com/test.php?lang=en&id=3 → 自动重定向到https://example.com/test/?lang=en&id=3,内部映射到test.php,参数可正常读取。
  • 访问https://example.com/test?lang=en&id=3 → 直接内部映射到test.php,无额外跳转,参数正常捕获。
  • 访问https://example.com/test/或https://example.com/test → 均能正确映射到test.php。

可选优化

如果不需要强制添加尾部斜杠,直接删除第二条重定向规则即可,此时所有URL格式(带/不带.php、带/不带尾部斜杠)都能正常工作,且查询参数全程保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:35:17