如何通过.htaccess将带查询字符串的特定页面重定向至外部网站?
没问题!针对你这种带特定查询字符串的重定向需求,用mod_rewrite就能轻松搞定,我给你整理了两个实用方案,你可以根据实际场景选择:
方案1:精准匹配指定URL与id参数
如果只是要对http://check.local.com/mod/ctxcatalog/course.php?id=187这个特定路径+特定参数值的请求做重定向,直接用下面的规则就行:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/mod/ctxcatalog/course\.php$ RewriteCond %{QUERY_STRING} ^id=187$ RewriteRule ^(.*)$ https://google.com? [R=301,L]
给你拆解下关键细节:
- 正则里的
\.是转义后的点,因为默认.是通配符,必须转义才能匹配真实的文件名 - 最后的
?一定要加,它会清除原URL的查询字符串,避免重定向后地址栏出现多余的?id=187 R=301是永久重定向,适合长期固定的跳转;如果只是测试阶段,可以先用R=302临时重定向,避免浏览器缓存后不好修改L表示这是最后一条规则,匹配成功后就不再执行后面的规则,防止冲突
方案2:匹配该路径下所有带id参数的请求
要是你需要把/mod/ctxcatalog/course.php下所有带数字id的请求都重定向到Google,规则可以调整成这样:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/mod/ctxcatalog/course\.php$ RewriteCond %{QUERY_STRING} (^|&)id=[0-9]+(&|$) RewriteRule ^(.*)$ https://google.com? [R=301,L]
这里的(^|&)id=[0-9]+(&|$)是正则表达式,能匹配任意数字形式的id参数,不管它在查询字符串的开头、中间还是结尾。
额外注意事项
- 确保你的Apache服务器已经启用了mod_rewrite模块,一般默认是开启的,如果没开需要在服务器配置文件(比如httpd.conf)里启用
- 把这些规则放在
.htaccess文件的最顶部,避免被其他已有的规则干扰 - 测试时可以用浏览器的隐私模式,避免缓存影响测试结果
内容的提问来源于stack exchange,提问作者chaitanya
相关产品推荐
相关产品推荐

