我正在使用子域运行一个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网友:Ryan Dorn
感谢所有对此发表评论的人,这无疑帮助我朝着正确的方向前进,最后,我相信我知道发生了什么,这是几个因素的组合。我意识到这可能与WP无关,但对于那些使用cPanel, 以下内容应该会有所帮助。我已经编译了一些“经验法则”项目,当它们全部就绪时,似乎已经解决了强制使用SSL协议的问题:
siteurl
和home
每个站点的选项数据库表中的字段(或wp admin中的字段)。。。~/wp-admin/network/sites.php > Edit Site > Site Address (URL)
对于每个站点)需要使用https://
在URL中,如果使用通配符SSL(我想大多数想要在子域驱动的多站点上使用SSL的人都会这样),则installed 对于root domain, not a wildcard domain. 我在上安装了SSL*derpsite.tld
并将其拆下/重新安装derpsite.tld
*.derpsite.tld -> YOURSERVERIPwildcard subdomain (*.derpsite.tld
) 需要创建,并且子域目录应该是根目录(在大多数情况下)cPanel 案例,这将是/public_html
...因为,如果运行多站点,您实际上不希望为“子站点”子域创建真正的目录)另外注意:如果您正在进行域映射,您可能需要park\' 您的外部域通过WHM或cPanel使其通过SSL强制运行。此外,截至4.5+ domain mapping is native). <请注意:在撰写本文时,我正在使用WP v.4.8.2和cPanel v.66.0.23。。。运行4.5之前的WP版本的站点可能需要不同的配置,我不完全确定这是否必要,但我的根目录中有以下指令.htacess
文件:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^my\\-mapped\\-external\\-domain\\.tld[NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://my-mapped-external-domain.tld/$1 [R,L]
希望这对别人有帮助!
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。