httpd.conf中新增Rewrite Rule适配无/online前缀URL需求
Apache Rewrite规则配置方案
现有规则回顾
你当前httpd.conf中已有的规则大致如下,作用是匹配所有(.*).example.com子域名的根路径请求,内部重写到指定地址且不暴露真实URL:
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC] RewriteRule ^/$ /anotherURL?storeId=xxxxx [L,NC]
新增规则实现无/online前缀URL兼容
在现有规则之前添加以下规则,即可让https://local.example.com/shop/、https://local.example.com/sale/这类无/online前缀的URL内部重写为带前缀的格式,实现正常访问:
# 重写无/online前缀的非根路径请求 RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC] RewriteCond %{REQUEST_URI} !^/$ RewriteCond %{REQUEST_URI} !^/online/ RewriteRule ^/(.*)$ /online/$1 [L,NC]
规则说明
- 前两个
RewriteCond:限定只处理example.com子域名的请求,同时排除根路径/,避免和现有规则冲突 - 第三个
RewriteCond:排除已带有/online前缀的请求,防止出现循环重写的问题 RewriteRule:将所有符合条件的请求URI(如/shop/)内部重写为/online/shop/,[L]表示执行完这条规则后停止后续规则解析,[NC]保证不区分大小写匹配
注意事项
- 规则顺序:新增规则必须放在现有根路径重写规则的前面,否则根路径规则会优先匹配,导致新增规则不生效
- 内部重写特性:该规则属于服务器内部重写,浏览器地址栏不会显示
/online前缀,完全符合需求 - 测试验证:可以用命令行工具测试,比如
curl -I https://local.example.com/shop/,查看返回内容是否与https://local.example.com/online/shop/一致
内容的提问来源于stack exchange,提问作者Alashqar
相关产品推荐
相关产品推荐

