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

通过.htaccess从URL参数生成动态子域名遇404问题求助

泛域名动态映射与URL重写解决方案

问题分析

你现有的.htaccess代码存在两处关键错误:

  • RewriteCond的正则表达式写错:^(^.*)\.example.com多了一个^,导致无法正确匹配子域名前缀
  • 未区分内部转发和外部重定向逻辑,也没排除主域名本身的访问请求

修正后的.htaccess代码

将根目录的.htaccess替换为以下内容:

RewriteEngine On

# 1. 处理子域名访问:将xxx.example.com转发到index.php?country=xxx
# 排除主域名(example.com)和www子域名(可根据需求调整)
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.example\.com$ [NC]
RewriteRule ^(.*)$ /index.php?country=%1 [L,QSA]

# 2. 处理反向重定向:将example.com/index.php?country=xxx重定向到xxx.example.com
RewriteCond %{QUERY_STRING} ^country=([a-z0-9-]+)$ [NC]
RewriteRule ^index\.php$ https://%1.example.com/ [R=301,L]

关键规则说明

  • [NC]:忽略大小写,兼容USA、Usa等格式的子域名/参数
  • [L]:停止执行后续规则,避免规则冲突
  • [QSA]:保留原URL的其他查询参数(如果有额外参数需求)
  • R=301:永久重定向,利于SEO;测试阶段可改用R=302临时重定向

额外注意事项

  • 确保cPanel中主域名的DocumentRoot设置为根目录,且泛域名(*.example.com)指向同一根目录(因为未创建子域名文件夹,需让所有泛域名请求落到主域名根目录)
  • 检查服务器是否开启mod_rewrite模块(cPanel默认开启,可在Apache模块管理中确认)
  • 测试前清空浏览器缓存,避免旧缓存干扰结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:27:32