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

7

我有一个针对“非 www”网站的.htaccess重定向,如下所示:

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个回答

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]

谢谢 - 参考这个解决方案对我有效。 服务器没有SSL,因此该部分未经过测试。 - Alvin

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。


嘿,Pero!我没测试它,因为我找到了另一个通过 PHP 的解决方案。不过,我还是接受你的答案,谢谢。 - MilMike

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();
}

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接