Apache 在htaccess中仅将HTTP子域重定向到HTTPS子域

Apache 在htaccess中仅将HTTP子域重定向到HTTPS子域,apache,.htaccess,redirect,mod-rewrite,Apache,.htaccess,Redirect,Mod Rewrite,如何在.htaccess中仅将HTTP子域重定向到HTTPS子域?主站点在WordPress中,已经通过插件重定向到HTTPS,但子域是PHP创建的站点。我已经看过了,但在这里没有看到一个最终的解决方案 我复制并粘贴了此建议代码,但它没有任何作用: #Redirect Subdomain RewriteEngine on RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC] RewriteRule .? https://%{HTTP_HO

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

我复制并粘贴了此建议代码,但它没有任何作用:

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

请尝试下列方法之一:

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

您不需要编辑以下内容

RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,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\u主机的条件即可。尽管您有其他不应重定向到HTTPS的子域,但请更改CondPattern以仅匹配子域或主域(以及www子域)。例如:

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

由于这是在
.htaccess
中,您需要从
重写规则
模式中删除斜杠前缀。实际上,对于重写行,斜杠前缀应该适用于任何请求的URL。但是,当然,如果您在子域的虚拟主机中写入斜杠前缀。至少,我将这些行用于域和子域的所有http到https重定向。这些指令不在virtualhost(或服务器)上下文中,而是在目录上下文中(即
.htaccess
)。这有很大的不同。在目录上下文中,首先从与
RewriteRule
指令匹配的URL路径中删除目录前缀(以斜杠结尾)。因此,匹配的URL路径从不以斜杠开头<如果在
.htaccess
中使用,则code>^/(.*)
将不匹配任何内容。您需要完全删除斜杠,即:
(.*)
,或者将其设置为可选的
^/?(.*)
。为什么要进行随机向下投票?这已经证明是一个可行的解决方案,应该适用于最常见的配置。如果它不能在您的服务器上工作,那么毫无疑问,这是由于其他因素造成的,例如SSL证书是如何安装在您的系统上的。
RewriteCond %{HTTP_HOST} ^((subdomain|www)\.)?example\.com [NC]