强制多站点子域子站点+cPanel配置的SSL协议

时间:2017-09-23 作者:Ryan Dorn

我正在使用子域运行一个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.tldhttps://child1.derpsite.tld)

  • 我目前正在查看如何设置SSL

    EDIT 2

    这个500 internal server error 以上似乎是在通配符域上安装SSL的结果;请查看我的\'answer\' 在下面

  • 4 个回复
    SO网友:Mark Kaplun

    从对错误的描述来看,在尝试通过http访问子级时,似乎根本无法访问与帐户相关的软件。这听起来像是web服务器配置错误,所以在您的情况下,您需要确保在cpanel中为http启用了子域,而不仅仅是https

    SO网友:Ryan Dorn

    感谢所有对此发表评论的人,这无疑帮助我朝着正确的方向前进,最后,我相信我知道发生了什么,这是几个因素的组合。我意识到这可能与WP无关,但对于那些使用cPanel, 以下内容应该会有所帮助。我已经编译了一些“经验法则”项目,当它们全部就绪时,似乎已经解决了强制使用SSL协议的问题:

    • siteurlhome 每个站点的选项数据库表中的字段(或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网友:SEO DEVS

    因为这被划分为两个不同的域,所以需要分两部分完成。尝试以下操作:

    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^derpsite\\.tld [NC]
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://derpsite.tld/$1 [R,L]
    
    RewriteCond %{HTTP_HOST} ^child1\\.derpsite\\.tld [NC]
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://child1.derpsite.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。

    结束