htaccess - 重定向非www - 但排除特定的子域

时间:2014-07-23 08:11:51

标签: apache .htaccess mod-rewrite redirect

我有一个系统,其中多个域共享一个htaccess。在片刻,我使用以下内容将所有非www请求重定向到www。

RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
现在唯一的问题是我根本无法使用子域名,因为sub-domain.myhost.com将被重定向到www.sub-domain.myhost.com。 是否有一种方法可以使上述规则例如排除以'sub-'开头的所有请求?而不是重定向到www。

更新:

Options +FollowSymLinks -MultiViews  
RewriteEngine On  
RewriteBase /  

RewriteCond %{HTTP_HOST} ^(?!(?:sub-|www)\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]  

我的.htaccess中只有上述5行会抛出“500 - 内部服务器错误”。

1 个答案:

答案 0 :(得分:1)

尝试这个简单的调整:

RewriteCond %{HTTP_HOST} ^(?!(?:sub-|www)) [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

<强>解释

  • ^锚点断言我们位于字符串的开头
  • 否定前瞻(?!(?:sub-|www))断言以下内容不是sub-www