如何防止ReweiteRules匹配子域

时间:2014-11-26 10:46:31

标签: apache .htaccess mod-rewrite

如何限制我的mod_rewrite RewriteRules仅适用于 www no-subdomain

子域名位于不同的文件夹中 - 而不是网站根文件夹,但是我的所有RewirteRules都适用于所有子域名,这不是我想要的。

我知道可以通过仅匹配 www no-subdomain 的RewriteCond匹配每个RewriteRule,但是我必须重复相同的所有RewriteRules的东西,这不是我想要的。

所以我想知道是否有任何方法全局阻止RewriteRules应用于其他子域?我还可以在每个子域中放置.htaccess个文件,以防止匹配,如果可能的话。

以下是我现在.htaccess所拥有的内容的一部分:

options -Indexes -MultiViews +FollowSymLinks
Header set Access-Control-Allow-Origin *

RewriteEngine On

RewriteBase /

RewriteRule ^city/([^/].+)/([^/].+)/([^/].+)/$ index.php?page=$3&city=$1 [L]
RewriteRule ^city/([^/].+)/([^/].+)/$ index.php?city=$1 [L]
RewriteRule ^flights/([^/].+)/$ index.php?page=flights&mode=$1 [L]
RewriteRule ^health/([^/].+)/$ index.php?page=health&view=$1 [L]
# so on ...
RewriteRule ^([^/].+)/$ index.php?page=$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . index.php [L]

更新#1

只是为了更好地解释问题,现在sub.domain.com显示domain.com而不是它的实际内容。

1 个答案:

答案 0 :(得分:2)

您可以在RewriteBase行下方插入此单个规则,以忽略其余规则中的所有子域:

# ignore all sub domains
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^ - [L]

example.com替换为您的实际域名。