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

.htaccess子域名重定向到子目录及HTTPS规则配置问题

解决es.example.com重定向到www.example.com/ES的问题

看起来你的规则逻辑本身是对的,但可能是浏览器缓存了旧的301重定向或者规则的细节需要调整。让我们一步步排查和修复:

问题分析

你已经添加了处理es.example.com的重定向规则并加上了L标志(终止后续规则),理论上应该优先执行这条规则,但出现异常的常见原因:

  • 301永久重定向的浏览器缓存:之前错误的规则被浏览器缓存,导致新规则不生效
  • 规则缺少忽略大小写的标志,可能导致某些边缘情况不匹配

修复方案

1. 调整重定向规则(添加NC标志)

修改第一条重写规则,加上NC(忽略大小写)标志,确保无论请求的域名是大写还是小写都能匹配,同时保留L和R=301:

RewriteCond %{HTTP_HOST} ^es\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/ES/$1 [R=301,L]

2. 强制清除浏览器缓存

因为301是永久重定向,浏览器会长期缓存这个响应。你需要:

  • 使用浏览器的隐私/无痕模式测试新规则
  • 手动清除浏览器的缓存(快捷键通常是Ctrl+Shift+Delete)
  • 或者临时把R=301改成R=302(临时重定向)测试,确认生效后再改回301

3. 完整的修正后.htaccess代码

这里是整合后的完整代码,确保重定向规则的顺序和参数正确:

AddType application/x-httpd-php .php .htm .html
AddDefaultCharset UTF-8
RewriteEngine On

# 处理es.example.com重定向到www.example.com/ES
RewriteCond %{HTTP_HOST} ^es\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/ES/$1 [R=301,L]

# 强制HTTPS和www前缀
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} !^local
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On
# Default directive
ExpiresDefault "access plus 1 month"
# My favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/svg "access plus 1 month"
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
# Flash
ExpiresByType application/x-shockwave-flash "access plus 1 month"
# CSS
ExpiresByType text/css "access plus 1 week"
# Javascript
ExpiresByType application/javascript "access plus 1 week"
</IfModule>

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)(\.gz)?$">
Header unset ETag
FileETag None
</FilesMatch>

<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|gz|html|svg|swf)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-shockwave-flash
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/opentype
# For Olders Browsers Which Can't Handle Compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

ErrorDocument 400 /400.html
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

测试步骤

  1. 替换你的.htaccess文件为上述代码
  2. 打开浏览器无痕模式,访问es.example.com(或带路径的页面,比如es.example.com/about)
  3. 确认是否正确跳转到https://www.example.com/ES/about

如果还是有问题,可以检查服务器是否启用了mod_rewrite模块,或者查看服务器的访问日志,确认请求是否被正确匹配到第一条规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:22:59