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

.htaccess mod_rewrite带查询字符串的子目录重写规则修复

.htaccess mod_rewrite 匹配带查询字符串的URL规则写法

规则失效核心原因

mod_rewrite 中 RewriteRule 指令默认只匹配URL的路径段(即域名后、?之前的部分),不会主动匹配?之后的查询字符串内容。你直接把查询字符串?ccce=announcements写在RewriteRule的匹配正则里,永远无法命中对应请求,这是规则不生效的根本原因。
涉及查询字符串的匹配判断,必须通过RewriteCond结合%{QUERY_STRING}服务器变量来实现。

可直接使用的正确规则

替换你原有规则为以下代码即可:

# 匹配公告详情页:/?ccce=announcements/{id}/{slug}.html
RewriteCond %{QUERY_STRING} ^ccce=announcements/([0-9]+)/[a-z0-9_-]+\.html$ [NC]
RewriteRule ^$ ./announcements.php?id=%1 [L]

# 匹配公告列表页:/?ccce=announcements
RewriteCond %{QUERY_STRING} ^ccce=announcements$ [NC]
RewriteRule ^$ ./announcements.php [L]

关键配置说明

  • RewriteCond 行负责校验查询字符串格式,正则中用括号捕获的内容(比如详情id),需要通过%1、%2的形式在后续RewriteRule中引用,和RewriteRule自身正则捕获用的$1做区分
  • 两类请求的路径部分都是站点根路径,所以RewriteRule用^$匹配空路径即可
  • 如果需要保留原始URL中携带的其他额外查询参数,可以在规则末尾的标记中加上QSA,例如把第一条规则标记改为[L,QSA],额外参数会自动追加到重写后的目标地址上
  • 规则中的NC标记表示匹配时不区分大小写,和你原有规则的行为保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:06:47