【问题标题】:Redirect all wild card subdomains and subdomain urls to the root domain and root domain urls using htaccess使用 htaccess 将所有通配符子域和子域 url 重定向到根域和根域 url
【发布时间】:2020-05-26 18:01:16
【问题描述】:

我正在尝试以这种方式重定向我的子域:anysubdomain.my_domain.com 及其 URL 必须分别重定向到根域及其 URL。

例如 (1) 如果用户尝试http://anysubdomain.my_domain.com,它应该重定向到https://www.my_domain.com

并且 (2) 如果用户尝试http://anysubdomain.my_domain.com/anyurl,它应该被重定向到https://www.my_domain.com/anyurl

我能够使用以下 htaccess 代码实现 (1):

   # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    RewriteCond %{HTTP_HOST} !^www.my_domain.com$
    RewriteRule ^(.*)$ https://www.my_domain.com/$1 [QSA,L,R=301]
    </IfModule>

但我无法完成 (2) 部分。我确信我们可以通过修改上述 htaccess 代码来做到这一点,但我不知道如何。

我已经有了通配符 cname,这就是为什么 (1) 可以正常工作。

如果重要的话,它也是一个 WordPress 网站。

【问题讨论】:

    标签: regex wordpress apache .htaccess mod-rewrite


    【解决方案1】:

    把这些规则放在第一位:

    RewriteCond %{HTTP_HOST} !^www.my_domain.com$
    RewriteRule ^(.*)$ https://www.my_domain.com/$1 [QSA,L,R=301]
    

    像这样:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^(www\.)?my_domain\.com$
    RewriteRule ^(.*)$ https://www.my_domain.com/$1 [QSA,L,R=301]
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    

    注意:清除浏览器缓存测试。

    【讨论】:

    • 你是个魔术师!我实际上是在谷歌上搜索并浪费了我的 5/6 小时!它有效.. 非常感谢!
    【解决方案2】:

    您可以使用此 .htaccess 来处理所有子域:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTPS} !on
    RewriteCond %{HTTP_HOST} (?:^|\.)(my_domain\.com)$ [NC]
    RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R=301]
    
    RewriteRule ^index\.php$ - [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
    
    </IfModule>
    

    确保在新浏览器中测试它以完全清除浏览器缓存。

    【讨论】:

    • 不幸的是它不起作用。我的意思是..我也使用了隐身模式..从一开始就完全清除了缓存。不适用于 (1) 或 (2) 他们都不工作:(
    • 这里有什么遗漏吗?
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2012-11-18
    • 2015-11-16
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多