将所有通配符子域重定向到根域
Posted
技术标签:
【中文标题】将所有通配符子域重定向到根域【英文标题】:redirect all wildcard subdomains to root domain 【发布时间】:2012-07-08 11:19:20 【问题描述】:好的,我已经进行了大量搜索,但仍然找不到足够具体的内容来解决我的问题。
现在我有一个 DNS 记录,它将所有其他子域重定向到我的服务器。我要问的是什么会使example.mydomain.com
返回HTTP/1.1 301
并重定向到mydomain.com
抱歉,如果这已涵盖,我只是找不到足够具体的内容。
【问题讨论】:
注:"How long do browsers cache HTTP 301" 和 "301 vs 302" 【参考方案1】:使用RewriteCond
匹配mydomain.com
以外的域,然后301 重定向它们:
RewriteEngine On
# If the domain (any domain) is not exactly mydomain.com...
RewriteCond %HTTP_HOST !^mydomain\.com$ [NC]
RewriteRule (.*) http://mydomain.com/$1 [L,R=301,QSA]
您还可以更具体地查找mydomain.com
的子域。上面的一个将匹配 任何 其他域。
# Match only subdomains of mydomain.com
RewriteCond %HTTP_HOST ^(.+)\.mydomain\.com$ [NC]
RewriteRule (.*) http://mydomain.com/$1 [L,R=301,QSA]
【讨论】:
@JorgeLuisBorges 不仅是 www。 - 它还匹配 任何子域subdomain.mydomain.com
或不完全匹配 mydomain.com
的任何内容。顶部示例还将mydomain.org
重定向到mydomain.com
,而底部仅匹配子域并且仅将subdomain.mydomain.com
重定向到mydomain.com
RewriteRule (.*) http://example.com/$1 [L,R=301,QSA]
产生斜杠,例如www.example.com
重定向到 example.com//
。 RewriteRule (.*) http://example.com$1 [L,R=301,QSA]
似乎是正确的。
@akarienta 这将取决于上下文。如果您在.htaccess 或<Directory>
中使用它(如果我记得的话),那么(.*)
将不会捕获前导/
。但是如果您在服务器级别的<VirtualHost>
中使用它,它将包含一个前导/
。文档中有关于此的注释:httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
@Michael Berkowski 啊,我明白了。谢谢解释!
它不工作。我正在使用 GoDaddy 服务器。请帮助【参考方案2】:
This article 涵盖 .htacces 和 ModRewrite 以将向主域以外的任何域发出的任何请求重定向到主域。
RewriteEngine On
RewriteBase /
RewriteCond %HTTP_HOST !www.newdomain.com$ [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [L,R=301]
【讨论】:
【参考方案3】:根据evan's blog,如果您将 apache 作为服务器端,您可以使用通配符“*”配置您的 ServerAlias。在这种情况下,对子域的每次访问都将被重定向或路由到根域。
<Virtualhost *:80>
VirtualDocumentRoot "/path/to/your/workspace/%1/public"
ServerName vhosts.dev
ServerAlias *.dev
UseCanonicalName Off
<Directory "/path/to/your/workspace/*">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</Virtualhost>
【讨论】:
【参考方案4】:在我的情况下,我需要像 foo.bar.com
> bar.com/page/foo
这样的规则,我在 apache 文档中找到了这个:
RewriteCond %HTTP_HOST ^(.+)\.bar\.com$ [NC]
RewriteCond %HTTP_HOST !www.bar.com$ [NC]
RewriteRule ^(.*)$ http://bar.com/page/%1/$1 [L,R=301]
【讨论】:
以上是关于将所有通配符子域重定向到根域的主要内容,如果未能解决你的问题,请参考以下文章