Apache重定向规则求助:三类URL场景需统一301重定向至指定域名
Apache重定向规则求助:三类URL场景需统一301重定向至指定域名
兄弟,你之前用的Redirect 301是针对单个固定URL的定向,自然没办法覆盖你说的三类动态变化的场景啦!要搞定这个需求,得用Apache的mod_rewrite模块——它能处理通配符匹配、查询字符串检测,完美适配你的三个URL模式。
下面是针对你需求写的完整重定向规则,直接放到你的.htaccess文件(或者Apache配置文件的对应站点块里)就行:
# 先启用mod_rewrite模块 RewriteEngine On # 场景1:匹配所有以/a/2/开头的URL(不管后续路径和查询字符串) RewriteRule ^a/2/.*$ https://mydomain.com [R=301,L] # 场景2:匹配所有以/s/ + 数字串开头的URL(比如/s/245/、/s/6789/这类) RewriteRule ^s/\d+/.*$ https://mydomain.com [R=301,L] # 场景3:匹配/addons/step1.php且查询字符串包含day_session=4的URL RewriteCond %{QUERY_STRING} (^|&)day_session=4(&|$) RewriteRule ^addons/step1\.php$ https://mydomain.com [R=301,L]
规则解释:
RewriteEngine On:必须放在最前面,开启重写功能^a/2/.*$:^匹配URL路径开头,.*匹配任意长度的后续字符,确保所有/a/2/开头的URL都被命中^s/\d+/.*$:\d+匹配一个或多个数字,覆盖/s/245/、/s/1234/这类带数字前缀的路径- 场景3的
RewriteCond:专门检测查询字符串里是否包含day_session=4,(^|&)和(&|$)是为了避免误匹配类似day_session=44这类参数值 [R=301,L]:R=301表示永久重定向,L表示匹配到这条规则后就停止处理后续规则,避免冲突
调试小提示:
测试的时候可以先把R=301改成R=302(临时重定向),因为301会被浏览器缓存,调试阶段用临时重定向更方便修改规则。等确认所有场景都能正确跳转后,再改回301就行。
备注:内容来源于stack exchange,提问作者Puzzel
相关产品推荐
相关产品推荐

