.htaccess中/category?id=2重定向到/index.php?cat=2失败求修正
问题修正方案
你的代码存在几个关键问题,导致重定向失效:
RewriteRule的匹配模式仅针对URL的路径部分,不包含查询字符串(即?后面的内容),所以你写的^category?id=$根本无法匹配目标请求。- 没有正确捕获
id参数的值,$1没有对应的正则捕获组,自然无法传递参数。 - 正则中的
?是特殊字符,需要转义,但这里根本不该在RewriteRule里处理查询串。
正确的代码实现
RewriteEngine On # 排除真实存在的文件和目录 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f # 匹配查询字符串中的id参数(仅数字值) RewriteCond %{QUERY_STRING} ^id=(\d+)$ # 匹配路径为/category的请求,将id值传递给cat参数 RewriteRule ^category$ /index.php?cat=%1 [L,R=301]
关键修改说明
- 用
RewriteCond %{QUERY_STRING}专门匹配查询字符串,通过(\d+)捕获id的数字值,用%1引用这个捕获的内容(RewriteCond的捕获组用%,RewriteRule的捕获组用$)。 RewriteRule仅匹配路径部分^category$,确保只针对/category这个路径生效。[R=301]表示永久重定向(浏览器地址栏会显示新URL),如果需要内部重写(地址栏不变,仅服务器内部跳转),可以去掉R=301,只保留[L]。- 确保已经开启
RewriteEngine On,否则重写规则不会生效。
内容的提问来源于stack exchange,提问作者Andreas Thomsson
相关产品推荐
相关产品推荐

