将所有通配符子域重定向到根域

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]

【讨论】:

以上是关于将所有通配符子域重定向到根域的主要内容,如果未能解决你的问题,请参考以下文章

将所有子域重定向到新的根域

如何将通配符子域重定向到我的域

将通配符子域重定向到子目录,而不更改地址栏中的 URL

带有通配符子域的 Apache SSL 重写

htaccess通配符子域重定向与https非www

Apache Rewrite - 重定向通配符子域和处理内部 URL 缩短器