如何避免根目录的.htaccess重写规则影响子域名?
解决根目录.htaccess规则影响子域名的问题
核心修改方案
直接修改根目录的.htaccess文件,移除继承指令并添加主机域名判断条件,完整代码如下:
RewriteEngine On # 仅对主域名生效,排除所有子域名 RewriteCond %{HTTP_HOST} ^domain\.co\.uk$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.php [NC,L]
关键修改说明
- 移除
RewriteOptions inherit:这个指令会强制子目录(子域名对应的站点目录通常属于根目录的子文件夹)继承当前.htaccess的所有规则,删掉它就能从根源避免子域名自动应用这些重写规则。 - 添加域名匹配条件:
RewriteCond %{HTTP_HOST} ^domain\.co\.uk$ [NC]限定规则仅在请求的主机是主域名domain.co.uk时触发。如果你的主域名包含www前缀,可以修改为RewriteCond %{HTTP_HOST} ^(www\.)?domain\.co\.uk$ [NC],这样主域名的www和非www版本都能正常应用规则,子域名则会被自动排除。 - 保留文件存在性判断:
RewriteCond %{REQUEST_FILENAME} !-f确保只有当请求的文件实际不存在时才执行重写,避免覆盖真实存在的静态文件或其他资源。
对之前尝试的说明
- 关于
Options -MultiViews +FollowSymLinks:MultiViews是Apache的内容协商功能,和子域名继承重写规则的问题无关,所以添加后没有效果是正常的。 - 关于直接写死主域名的RewriteRule:这种方式只是强制跳转,但没有添加主机判断条件,子域名的请求依然会被这条规则处理,无法从根本上解决规则影响子域名的问题。
内容的提问来源于stack exchange,提问作者Toki
相关产品推荐
相关产品推荐

