You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置.htaccess:主域名重定向到static_site,子域名除外?

.htaccess 配置:主域名重定向到/static_site,保留HTTPS与去WWW功能

需求说明

  • 主域名example.com的请求需重写到/static_site目录
  • 子域名wp.example.com和another.example.com不受上述重写规则影响
  • 保留强制HTTPS和移除www前缀的原有功能

初始配置问题

初始的.htaccess配置未区分主域名与子域名,所有域名的请求都会被重写到/static_site,不符合子域名站点的需求:

Options +FollowSymLinks -Multiviews

<IfModule mod_rewrite.c>
    RewriteEngine on 

    # 强制HTTPS并移除www
    RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
    RewriteRule ^ https://%2%{REQUEST_URI} [R=301,L]
    
    # 所有请求重写到/static_site
    RewriteCond %{REQUEST_URI} !^/static_site
    RewriteRule ^(.*)$ /static_site/$1 [L]
</IfModule>

错误尝试的原因

后续添加的规则存在两处关键错误,导致出现503、403、404错误:

RewriteCond %{REQUEST_URI} =!wp.example.com
RewriteCond %{REQUEST_URI} =!another.example.com
RewriteRule ^(.*)$ /static_site/$1 [L]
  1. 错误使用%{REQUEST_URI}变量:该变量存储的是请求路径,而非主机域名,无法匹配子域名
  2. 语法错误:=!不是正确的否定匹配语法,正确的否定匹配应使用!前缀加正则表达式

最终正确配置

根据修正后的规则,既能满足主域名重写需求,又能保留原有HTTPS和去WWW功能,同时排除子域名:

Options +FollowSymLinks -Multiviews

<IfModule mod_rewrite.c>
RewriteEngine on

# 强制HTTPS并移除www前缀
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# 主域名请求重写到/static_site,子域名除外
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{REQUEST_URI} !^/static_site
RewriteRule ^(.*)$ /static_site/$1 [L]
</IfModule>

规则解释

  1. 强制HTTPS:当请求为HTTP时,重定向到相同主机名的HTTPS版本
  2. 移除www前缀:匹配带www的域名,重定向到去掉www的HTTPS域名
  3. 主域名重写:
    • 仅匹配主域名example.com
    • 排除已指向/static_site的请求,避免循环重写
    • 将所有请求转发到/static_site目录下,不对外暴露重写行为(无外部重定向)

内容的提问来源于stack exchange,提问作者user3780425

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:11:11