Apache环境下带查询字符串的.htaccess URL重定向问题
解决Java迁移WordPress后带参数JSP URL的301重定向问题
正确的重定向规则
将以下规则放在.htaccess文件的最顶部(WordPress默认规则块# BEGIN WordPress之前):
# 重定向特定旧JSP URL到新WordPress页面 RewriteCond %{QUERY_STRING} ^page=werkkleding\.jsp$ RewriteRule ^page_reader\.jsp$ /bedrijfskleding/ [R=301,L,QSD]
为什么之前的尝试失败?
逐个分析你试过的规则问题:
Redirect 301 /page_reader.jsp?page=werkkleding.jsp ...:Redirect属于mod_alias模块,仅匹配URL的路径部分(即/page_reader.jsp),不会识别查询字符串,因此带?page=werkkleding.jsp的请求永远不会触发这条规则。RewriteCond %{THE_REQUEST} ...:理论上可行,但如果规则放在WordPress默认规则之后,WordPress的重写规则会先接管请求,直接返回404,导致这条规则无法执行。- 导致500错误的规则:最后一条规则存在语法错误(多余的
$和反引号),Apache解析规则时出错,返回内部服务器错误。 RewriteRule ^page_reader.*$ ...:这条规则能匹配所有以page_reader开头的路径,但如果放在WordPress规则之后,会被提前拦截返回404;另外QSD参数需要Apache 2.4+支持,若服务器版本过低,QSD不会生效。
关键注意事项
- 规则位置优先:必须将自定义重定向规则放在WordPress默认规则之前,否则WordPress的
index.php转发规则会先处理请求,直接返回404。 - 清除缓存测试:301永久重定向会被浏览器和CDN缓存,测试前务必清除浏览器缓存,或使用隐私模式访问。
- 批量重定向(可选):如果有多个类似旧URL(如
page=xxx.jsp对应新路径/xxx/),可使用批量规则(需旧参数值和新slug一致):
若参数值和新slug不一致(如你的例子中RewriteCond %{QUERY_STRING} ^page=([a-z0-9_]+)\.jsp$ [NC] RewriteRule ^page_reader\.jsp$ /%1/ [R=301,L,QSD]werkkleding对应bedrijfskleding),则需要单独为每个URL写一条规则。
内容的提问来源于stack exchange,提问作者Jason Dana
相关产品推荐
相关产品推荐

