.htaccess重写查询请求失败:特定带参数URL重定向求助
解决.htaccess重定向/blog/?p=数字到/blogs的问题
嘿,我来帮你搞定这个重定向的问题!你的现有规则没生效,大概率是几个细节没处理好,我给你调整一下,顺便解释原因:
首先,你原来的规则里,RewriteCond %{REQUEST_URI} ^/blog/$ 只严格匹配带结尾斜杠的 /blog/,但实际请求可能是不带斜杠的 /blog?p=51,这就会漏掉这种情况;另外,默认情况下RewriteRule会保留原查询字符串,所以你需要主动清除它。
试试这个修正后的规则:
RewriteEngine On # 匹配所有 /blog 或 /blog/ 后带 p=数字的请求,重定向到 /blogs RewriteCond %{QUERY_STRING} ^p=\d+$ RewriteRule ^blog/?$ /blogs? [R=302,L]
我给你拆解一下每部分的作用:
RewriteEngine On:先确保重写引擎是开启的(如果你的.htaccess里没加过的话必须加上)RewriteCond %{QUERY_STRING} ^p=\d+$:精准匹配查询字符串是p=后面跟一串数字的情况RewriteRule ^blog/?$ /blogs?:^blog/?$同时匹配/blog和/blog/两种路径;末尾的?是关键,它会告诉Apache不要把原查询字符串带到新URL里R=302,L:R=302是临时重定向,等你确认规则没问题后,可以改成R=301永久重定向;L表示这是最后一条规则,匹配后就不再往下执行其他规则
还有几个小提醒:
- 确保你的.htaccess文件放在网站的根目录下
- 服务器配置里要允许使用.htaccess(也就是
AllowOverride All,如果是自己的服务器可以检查一下) - 测试前记得清空浏览器缓存,不然旧的重定向缓存可能会干扰结果
内容的提问来源于stack exchange,提问作者gcerni
相关产品推荐
相关产品推荐

