【问题标题】:how to redirect www subdomain to non-www when domain is redirected to www域重定向到www时如何将www子域重定向到非www
【发布时间】:2014-03-25 23:03:32
【问题描述】:

我的主域目前永久重定向到 www.mydomain.com(非 www 到 www 重定向),使用 .htaccess 如下:

RewriteCond %{HTTP_HOST} ^mydomain.com$
RewriteRule ^/?$ "http\:\/\/www\.mydomain\.com\/" [R=301,L]

RewriteCond %{HTTP_REFERER} !^http://mydomain.com/.*$      [NC]
RewriteCond %{HTTP_REFERER} !^http://mydomain.com$      [NC]
RewriteCond %{HTTP_REFERER} !^http://www.mydomain.com/.*$      [NC]
RewriteCond %{HTTP_REFERER} !^http://www.mydomain.com$      [NC]

我想知道我将如何创建所有子域,例如。 blog.mydomain.com,将被重定向到非 www,例如。 blog.mydomain.com不是 www.blog.mydomain.com。每次我创建子域并在浏览器中输入非www URL时,它都会提示重定向循环。

希望您能提供帮助!谢谢! :)

【问题讨论】:

标签: apache .htaccess redirect subdomain no-www


【解决方案1】:

为所有子域保留这一规则:

# rule for forcing www on main domain
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# rule for removing www on sub domains
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.mydomain\.com)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

【讨论】:

  • 我们能否让 http 部分动态化,以便如果网站更改为 https 则它应该是自动的?
  • 如果有人在www.sub.domain.com 之前添加https://,这将不起作用
  • 绝对是工作规则,与https无关
  • 假设我有我的子域 xyz.abc.com 现在如果有人浏览到 www.xyz.abc.com 那么它完美地重定向到 xyz.abc.com 但如果有人添加 https:// infront的 www.xyz.abc.com 然后它无法重定向到没有 www
  • @MrinmoyMk:你能为此发布一个新问题吗?我会在那里发布答案。
【解决方案2】:

这一行支持http + https

# Redirect www subdomain to non-www 
RewriteCond %{HTTP_HOST} ^www\.([^.]+\.yourdomain\.com)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [R=301,L]

【讨论】: