求mod_rewrite规则:将FQDN重写为不含域名的主机名(避免循环)
Apache mod_rewrite 重定向方案:去掉FQDN后缀到短主机名
直接上可用的规则,把这段放到你的.htaccess文件里(或者Apache主配置的对应虚拟主机块中):
RewriteEngine On # 匹配以.example.com结尾的FQDN,捕获前缀部分 RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC] # 防止重定向循环:确保目标主机名不等于当前请求的主机名 RewriteCond %{HTTP_HOST} !^%1$ [NC] # 重定向到短主机名的对应路径,301是永久重定向 RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
规则解释:
RewriteEngine On:开启mod_rewrite功能,必须放在规则最前面%{HTTP_HOST}:Apache内置变量,获取当前请求的完整主机名(比如appname.example.com)^(.+)\.example\.com$ [NC]:正则匹配主机名,(.+)捕获example.com前面的所有字符(也就是你的appname),[NC]表示不区分大小写匹配%{HTTP_HOST} !^%1$ [NC]:防循环核心规则——检查当前主机名不等于捕获到的短主机名,避免重定向后再次触发规则R=301:指定永久重定向(适合生产环境,对SEO友好),测试阶段可以换成R=302临时重定向L:标记为最后执行的规则,匹配后不再处理后续rewrite规则
注意事项:
- 确保你的短主机名(比如
appname)已经正确解析到当前服务器,否则重定向后用户无法访问 - 如果站点使用HTTPS,把规则里的
http://改成https:// - 确认Apache已启用mod_rewrite模块(可通过
a2enmod rewrite命令开启) - 若使用
.htaccess,需保证服务器配置中对应目录设置了AllowOverride All,否则.htaccess规则不会生效
内容的提问来源于stack exchange,提问作者MarcusDeroy
相关产品推荐
相关产品推荐

