htaccess的RewriteRule规则包含&符号无法正常生效问题求助
错误原因
最后一行RewriteRule规则共有3处可导致失效的问题:
- 正则语法错误:第二个参数的捕获组缺少左中括号,你写的
(0-9]+)属于语法错误,正确写法应为([0-9]+) - 拼接符转义错误:
&是HTML场景下的转义写法,htaccess的RewriteRule目标URL参数拼接直接使用原生&即可,不需要做HTML转义 - 规则顺序错误:你当前把短路径匹配规则
^ft/([0-9]+)放在了长路径匹配规则前面,且没有加路径结束锚点$,会导致请求ft/数字/数字格式的路径时,先被第三行短规则匹配到,触发L标记终止后续规则执行,永远不会走到最后一行规则。
修正后完整规则
RewriteRule ^forums$ forum.php [NC,L] RewriteRule ^fc/([0-9]+)$ forum.php?fc=$1 [NC,L] # 长路径规则前置,避免被短规则提前拦截 RewriteRule ^ft/([0-9]+)/([0-9]+)$ forum.php?ft=$1&e=$2 [NC,L] RewriteRule ^ft/([0-9]+)$ forum.php?ft=$1 [NC,L]
内容的提问来源于stack exchange,提问作者exclude1987
相关产品推荐
相关产品推荐

