使用htaccess mod_rewrite实现子域名无跳转加载指定路径内容
正确的.htaccess mod_rewrite配置
<IfModule mod_rewrite.c> RewriteEngine On # 匹配目标子域名,NC标记表示忽略大小写 RewriteCond %{HTTP_HOST} ^menu\.sogustocafe\.com$ [NC] # 仅匹配根路径请求,内部重写到目标路径,L标记表示终止后续规则匹配 RewriteRule ^$ /menu-sogusto [L] # 若需该子域名下所有请求都映射到/menu-sogusto目录(如访问menu.sogustocafe.com/demo 展示/menu-sogusto/demo的内容),可替换上一行RewriteRule为以下内容 # RewriteRule ^(.*)$ /menu-sogusto/$1 [L] </IfModule>
原规则失效原因
- 没有添加
[L]标记,mod_rewrite会继续执行后续其他规则,导致当前重写逻辑被覆盖 - 正则匹配
.*会拦截所有请求,包括/menu-sogusto路径下的资源请求,容易触发循环重写 [PT]标记用于将重写结果传递给其他Apache模块处理,在.htaccess上下文下无需添加,反而可能导致路径解析异常- 域名匹配规则未加
[NC]标记,遇到大小写不一致的Host请求头时会匹配失效
生效检查项
- 确认托管主机已开启mod_rewrite模块,且配置了
AllowOverride All允许.htaccess文件生效 - 测试前清理浏览器缓存,避免之前的301永久跳转缓存干扰结果
- 若页面的静态资源(css、js、图片)加载异常,使用注释中的全路径映射规则即可解决
内容的提问来源于stack exchange,提问作者Sahibzada Jawad
相关产品推荐
相关产品推荐

