动态分类路径提取末尾ID的Apache mod_rewrite规则报500错误求解
问题原因
- 重复声明
RewriteEngine On,且RewriteBase /位置放置错误,触发Apache配置解析错误 - 重写规则的正则表达式没有设置捕获组,
$1无法取到对应值,同时使用的正向预查语法在部分低版本Apache中不被支持,直接触发内部服务错误 - 规则没有限定仅匹配
/category开头的路径,容易引发不必要的重写逻辑甚至重写循环 - 匹配逻辑不符合需求,没有限定仅捕获URL路径末尾的数字
修复后的完整配置
<IfModule mod_rewrite.c> Options +FollowSymLinks -MultiViews -Indexes RewriteEngine On RewriteBase / # HTTP跳转HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] # 分类路径重写:仅匹配/category开头、末尾是数字的路径 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^category/.*?(\d+)/?$ index.php?CID=$1 [L] </IfModule>
配置说明
- 所有重写相关规则都放到
mod_rewrite.c判断块内,避免模块未安装时触发配置错误 - 正则直接捕获路径末尾的数字段,不需要用到兼容性差的预查语法,匹配逻辑符合取URL末尾数字作为分类ID的需求
- 仅匹配
/category开头的路径,不会影响站点其他页面的正常访问 - 末尾加
/?兼容URL末尾带斜杠和不带斜杠的两种情况
内容的提问来源于stack exchange,提问作者ashbringer
相关产品推荐
相关产品推荐

