将非www域重定向到www,保留登台

时间:2011-01-21 20:25:54

标签: .htaccess redirect

我有两个域,www.example.com和staging.example.com(两者都托管在同一个盒子上)。

我想始终将example.com重定向到www.example.com,但是当我使用来自其他SO线程的解决方案时,它会破坏暂存域。

有人能指出我正确的方向吗?

谢谢!

更新:这是否也包括https?如果没有,我该怎么做才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

您需要在目录根目录下的.htaccess文件中输入:

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

魔法在于^,这表明如果地址是example.com的地址,它应该只重写网址。这使得staging.example.com脱离了循环。

如果您需要为HTTPS执行此操作,只需在条件中添加以下行并根据需要进行调整(= on或!= on):

RewriteCond $ {HTTPS} = on

这给了你:

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

哦,别忘了把RewriteEngine放在.htaccess文件的顶部

答案 1 :(得分:0)

RewriteEngine On

# not HTTPS
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

# HTTPS
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

与staging.example.com

不应有任何冲突