【发布时间】:2021-03-29 09:26:51
【问题描述】:
在 Wordpress 多站点安装的上下文中,我需要对主域强制执行 https 连接(我们称之为 https://site.lt),同时对子域强制执行不安全的连接(http://en.site.lt、http://ru.site.lt)。我需要通过配置 .htaccess 文件在共享主机上执行此操作。问题是,托管服务提供商仅为域和配置的子域安装 Let's Encrypt 证书,但不支持通配符,但 Wordpress Multisite 使用虚拟子域(没有 en/ 或 ru/ 目录对应子域名)。所以我需要尽可能使用 ssl,但要避免子域上出现不安全的连接警告。
这是我现在拥有的(“MY CODE HERE”标记我偏离 WP 默认值的地方):
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
## MY CODE HERE:
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^ru.site.lt$ [NC,OR]
RewriteCond %{HTTP_HOST} ^en.site.lt$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} !^en.site.lt$ [NC]
RewriteCond %{HTTP_HOST} !^ru.site.lt$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
## END MY CODE
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
它确实在主域上强制执行 https,但它对子域的工作方式有限。如果我尝试打开https://en.site.lt,首先我会收到一个警告屏幕,提示连接不安全,只有当我接受不安全的连接(例外)后,重写规则才会启动,我会被重定向到 http 站点...当用户接受不安全的连接时,这已经毫无意义了。
【问题讨论】:
-
您的子域在
https上工作吗? -
好吧,只有当你添加一个安全例外。浏览器抱怨证书不匹配。这就是糟糕的用户体验。
-
我已经用我当前的重写规则更新了我的问题。
标签: .htaccess ssl wildcard multisite wildcard-subdomain