【问题标题】:Redirect only HTTP subdomain to HTTPS subdomain in htaccess仅将 HTTP 子域重定向到 htaccess 中的 HTTPS 子域
【发布时间】:2019-03-03 10:03:07
【问题描述】:

如何仅将 HTTP 子域重定向到 .htaccess 中的 HTTPS 子域?主站点在 WordPress 中,并且已经通过插件重定向到 HTTPS,但子域是 PHP 创建的站点。我在此处查看并没有看到最终的解决方案。

我复制并粘贴了这个建议的代码,但它什么也没做:

#Redirect Subdomain
RewriteEngine on
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

【问题讨论】:

    标签: apache .htaccess redirect mod-rewrite


    【解决方案1】:

    请尝试以下方法之一:

    you need to edit
        Redirect "/" "https://yourwebsite.com/"
    

    您不需要编辑以下内容

    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
    

    【讨论】:

    • 由于这是在.htaccess 中,您需要从RewriteRule 中删除斜杠前缀pattern
    • 实际上对于 Rewrite 行,它应该适用于任何请求的 URL。但是,当然,如果您将它写在子域的虚拟主机中。至少,我将这些行用于域和子域的所有 http 到 https 重定向。
    • 这些指令不在 virtualhost(或 server)上下文中,它们在 directory 上下文中(即..htaccess)。这有很大的不同。在 directory 上下文中,首先从RewriteRule 指令匹配的 URL 路径中删除目录前缀(特别是 以斜杠结尾)。因此,匹配 never 的 URL 路径以斜杠开头。如果在 .htaccess 中使用,^/(.*) 将不匹配任何内容。您需要完全删除斜线,即。 (.*),或将其设为可选 ^/?(.*)
    【解决方案2】:
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
    RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    这将创建一个重定向循环(如果执行的话)。为了从 HTTP 重定向到 HTTPS,您需要首先检查您尚未使用 HTTPS(否则您将获得重定向循环)。

    这些指令需要放在子域文档根目录中的.htaccess 中。如果子域指向主站点的文档根目录,则位于根 (WordPress) .htaccess 文件的顶部。重要的是重定向必须在 WordPress 前端控制器之前进行。

    这还假设您的 SSL 证书直接安装在您的应用服务器上,而不是代理服务器上。

    尝试以下方法:

    RewriteEngine On
    RewriteCond %{HTTPS} !on
    RewriteCond %{HTTP_HOST} ^subdomain\.example\.com [NC]
    RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    这会检查HTTPS 不包含“on”并且在重定向到同一主机上的 HTTPS 之前请求子域。

    虽然如果 WP 只是简单地重定向主域,那么您可以在 .htaccess 中执行所有这些操作,并简单地删除检查 HTTP_HOST 的条件。尽管如果您有其他不应重定向到 HTTPS 的子域,则更改 CondPattern 以仅匹配子域或主域(以及 www 子域)。例如:

    RewriteCond %{HTTP_HOST} ^((subdomain|www)\.)?example\.com [NC]
    

    【讨论】:

    • 为什么随机投反对票?这已被证明是一个可行的解决方案,并且应该适用于最常见的配置。如果它在您的服务器上无法正常工作,那么毫无疑问是由于其他因素,例如您的系统上安装 SSL 证书的方式。
    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2015-05-19
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多