.htaccess第三条URL重写规则无法跳转至category.php问题求助
.htaccess 分类路径重写规则不生效修复方案
问题根因
你第三条规则的正则表达式存在语法错误:$符号前多了多余的转义反斜杠\,导致规则变成匹配路径末尾带字面量$的请求,自然无法命中/some-folder这类普通分类路径。
修复步骤
- 修正第三条规则的正则语法,删除
$前的反斜杠即可,也可以增加捕获组方便分类参数传递:
原错误规则:
RewriteRule ^/?[^/]+\$ category.php [QSA,L]
修正后规则(兼容带/不带尾斜杠,同时传递分类名参数,方便category.php直接读取分类标识):
RewriteRule ^/?([^/]+)/?$ category.php?cat=$1 [QSA,L]
- 如果你不需要自动传递分类名,只需要转发请求,最简修复版为:
RewriteRule ^/?[^/]+$ category.php [QSA,L]
附加排查建议
- 改完规则后先清空浏览器缓存,避免301永久跳转缓存干扰测试
- 若仍不生效,可以临时开启Apache重写日志查看匹配过程:Apache 2.4版本可在配置中添加
LogLevel debug rewrite:trace3,从日志中可以清晰看到每条规则的匹配命中情况 - 你当前的规则顺序是合理的,前两条匹配带
.html后缀的产品、单页请求,不会和分类路径规则冲突,不需要调整顺序
修正后完整代码
Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l # WORKING - 匹配产品路径 例如 /some-folder/some-product.html RewriteRule ^/?([^/]+)/.+\.html$ product.php [QSA,L] # WORKING - 匹配单页路径 例如 /some-page.html RewriteRule ^/?[^/]+\.html$ page.php [QSA,L] # 修复后 - 匹配分类路径 例如 /some-folder 或 /some-folder/ RewriteRule ^/?([^/]+)/?$ category.php?cat=$1 [QSA,L]
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

