非www .htaccess重定向 - 忽略其他子域

时间:2010-04-12 09:50:24

标签: apache .htaccess mod-rewrite redirect

我有一个.htaccess重定向“非www”,如下所示:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

它正在运作。但是,除了www之外,我还有一些子域名。 如果我打电话给例如http://shop.example.com,它会将我重定向到: http://www.shop.example.com

我不想将子域写入.htaccess文件,它应该自动工作,只需忽略www和''之外的任何其他内容:

if subdomain =='' -> redirect to www.HTTP_HOST....
elseif subdomain !='' && subdomain !='www' -> do nothing.

谢谢!

3 个答案:

答案 0 :(得分:10)

尝试此规则:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

还要考虑HTTPS:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

答案 1 :(得分:1)

试试这个:

Options +FollowSymlinks

RewriteEngine On

RewriteCond %{HTTP_HOST}//s%{HTTPS} ^www\.(.*)//((s)on|s.*)$ [NC]

RewriteRule ^ http%3://%1%{REQUEST_URI} [L,R=301]

刚刚尝试使用internetagentur.drupal-webmaster.de(子域名) - 主要是没有www。

答案 2 :(得分:0)

如果你想要一个php解决方案,你可以使用类似的东西:

define('URL', 'yourdomain.com/');

// fix : impose www rule
if (strpos($_SERVER['SERVER_NAME'], 'www') === false ) {
    header('Location: http://www.'.URL.$_SERVER['REQUEST_URI']);
    die();
}

这也会重定向到最初请求的页面。