我正在使用子域运行一个WP多站点。我想强制所有请求使用SSL协议,但在我的子站点上遇到了非SSL请求的问题。我正在使用WP Force SSL 插件。我已经做了一些挖掘,并尝试了以下方法。htaccess指令,但它不起作用(也不起任何作用):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
例如:
EDIT 1
我已经联系了我的主机(安装了cPanel的专用服务器)和cPanel(后者我仍然有一个开放的票证)。cPanel提到:
cPanel上的Apache配置与您可能使用的其他服务器略有不同。默认情况下,Apache将接受所请求的任何域名,因为它被设置为通配符。在cPanel服务器上,virtualhosts是专门为您创建的域配置的。例如,当您为defectslawyer创建cPanel帐户时。com,它设置了一个特定于defectslawyer的配置。com。假设我为我的域名指向DNS,这是RealDomain。com连接到服务器。当我请求ThisisRealDomain时。Apache检查该域的配置,没有找到,然后返回cPanel默认页面。
听起来您的DNS配置正确,我假设有一个通配符子域记录指向您的服务器,但Apache不知道如何处理所请求的内容。至少在非SSL方面。解决这个问题的方法是在cPanel中添加一个通配符子域[https://documentation.cpanel.net/display/ALD/Subdomains]以便Apache vhost for*。透辉石。添加tld。然后,当任何事情发生时。透辉石。如果请求tld,Apache将能够找到该vhost并知道要加载什么。
SSL版本可能正常工作的原因是您可能已将SSL安装为*。透辉石。创建SSL vhost的tld。
基于此输入,我有:
在cPanel中添加了一个通配符子域(并使子域文档根指向主站点根)。。。现在它踢出了500 internal server error
对于两者http://child1.derpsite.tld
和https://child1.derpsite.tld
)
我目前正在查看如何设置SSLEDIT 2
这个500 internal server error
以上似乎是在通配符域上安装SSL的结果;请查看我的\'answer\' 在下面
SO网友:prosti
如果您很好地配置了Web,通常不需要运行插件来强制SSL。
你只需要Settings -> General
并将两个URL更改为https://
而不是http://
. 清除缓存插件也是一个好主意。正如我看到的,SSL证书已经到位,并且根据您所说的为您工作。
您提到的这个插件的核心是:
// "The Core"
define(\'FORCE_SSL\' , true);
if (defined(\'FORCE_SSL\'))
add_action(\'template_redirect\', \'force_ssl\');
function force_ssl(){
if ( FORCE_SSL && !is_ssl () )
{
wp_redirect(\'https://\' . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\'], 301 );
exit();
}
}
如您所见,PHP或WordPress已被用于强制重定向。相反,这些重定向在Web服务器级别上更好、更智能。不需要使用PHP。