使用www将任何子域的URL重写为没有www的相应子域

时间:2011-11-24 14:28:49

标签: regex mod-rewrite apache2 subdomain

我们有一个多子域网站,根据子域文本生成动态强制。但是,如果将www附加到子域,则它不起作用。由于一些用户习惯在每个URL前添加www,我们希望通过URL重写来修复它。

修改

我到目前为止:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.subdominio\.dev [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{http_host} ^www\.([^\.]+)\.subdominio\.dev [NC]
RewriteRule ^(.*) http://%1.subdominio.dev$1 [R=301,QSA,NC]

令人惊讶的。它适用于我的一个测试子域,但不适用于另一个:

www.otro-mas.subdominio.dev被重定向到otro-mas.subdomino.dev(有和没有像/index.html这样的URI)。正如预期的那样。

然而,www.ono.subdominio.dev正在进行无限重定向。像这样:

http://www.ono.subdominio.dev/ono.subdominio.dev//ono.subdominio.dev//ono ...

为什么不重写主机?

2 个答案:

答案 0 :(得分:0)

试试这个:

RewriteCond %{HTTP_HOST} ^www\.([a-zA-Z-_]+)\.domain\.com [NC]
RewriteRule ^(.*)$ http://%1\.domain\.com/$1 [R=301,NC,QSA,L]

您可能忘记了QSAL指令(请在Apache mod_rewrite documentation上搜索解释)。

答案 1 :(得分:0)

确实有效。

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.subdominio\.dev [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{http_host} ^www\.([^\.]+)\.subdominio\.dev [NC]
RewriteRule ^(.*) http://%1.subdominio.dev$1 [R=301,QSA,NC]

我的浏览器中的缓存存在问题。