【问题标题】:redirect all wildcard subdomains to root domain将所有通配符子域重定向到根域
【发布时间】:2012-07-08 11:19:20
【问题描述】:

好的,我已经进行了大量搜索,但仍然找不到足够具体的内容来解决我的问题。

现在我有一个 DNS 记录,它将所有其他子域重定向到我的服务器。我要问的是什么会使example.mydomain.com 返回HTTP/1.1 301 并重定向到mydomain.com

抱歉,如果这已涵盖,我只是找不到足够具体的内容。

【问题讨论】:

标签: apache .htaccess mod-rewrite


【解决方案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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        • 2023-03-21
        • 2013-04-23
        • 2014-05-29
        • 2018-10-22
        • 2012-10-13
        • 1970-01-01
        相关资源
        最近更新 更多