Wordpress Woocommerce网站:在帐户页面强制SSL导致内部服务器错误

时间:2015-05-28 15:50:48

标签: wordpress .htaccess ssl https woocommerce

我花了好几个小时搜索并发现了很多类似的问题,但要么他们的解决方案没有用,要么他们没有解决方案,所以这里有:

我正在移动一个在Wordpress上运行Woocommerce的网站 - 它在当前服务器上100%工作,但必须移动它。在新服务器(数字海洋上的Ubuntu 14.04)上,除了“ssl'有关。我在服务器上安装了有效的证书,但证书上的域名与站点的域名不匹配,因为我还没有将名称服务器指向我的新服务器。现在,我在一个子目录中运行该网站的IP地址,如下所示:

  

http://104.236.XXX.XXX/domain.com/

如果我在Woocommerce中禁用强制SSL选项,则帐户和结帐页面可以正常工作。但我需要他们使用SSL来保证安全。 如果我启用强制SSL'在Woocommerce>设置>结帐时,帐户和结帐页面显示内部服务器错误。 FWIW,我已尝试禁用Woocommerce的强制SSL并使用其他插件(如iTheme Security或Wordpress HTTPS)并获得相同的结果)。

令人沮丧的是,php和apache日志没有显示此错误(请转到下面这一点)。我去了.htaccess文件,因为我已经知道这是此错误的常见来源。 .htaccess文件是:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /domain.com/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /domain.com/index.php [L]
</IfModule>
# END WordPress

这看起来是正确的,但我没有其他途径可以探索,只是为了进行实验,我删除了两个&domain.com /&#39; (即假装我没有在子目录中工作)。 当我这样做时,帐户和结帐页面将以https加载(!),但不会加载任何javascript或CSS文件,因为它们都在&#39; http&#39;这会触发混合内容警告。因此,尽管我可以看到这些页面的内容,但它们看起来很糟糕且不起作用。最后,没有其他页面可以在这个新的.htaccess文件下工作,因为服务器正在查找错误的目录。

我完全难过,而且我发现其他人也同样难以接受相关问题。

我确定如果我正在进行任何日志记录,我会指向正确的方向,但我已经跟踪了每个线程,看起来我的日志记录配置正确。在/var/log/apache2/error.log中我有一些misc日志,我认为这与我重新加载apache时有关 - 与此https错误无关。我的php.ini文件已打开log_error,应该记录到/var/log/php_errors.log(我创建的文件),但此文件为空。

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

好吧,我一次改变了三件事,我无法找出哪一个解决了问题所以我会列出所有这些,以防万一其他人有相同的情况。

首先,我意识到在我的SSL虚拟主机(/etc/apache2/sites-available/default-ssl.conf)中,我的ServerName被设置为最终将成为域的域而不是我目前使用的IP地址。这绝对是问题的一部分,但不是整个问题。

其次,我将整个网站移出子目录并进入根目录 - 我确信这不是必要的,但我认为它消除了一个可能的混淆/问题来源。

第三,我实施了一个我在一些博客或文章中发现的修复程序(我现在找不到我的生活)。修复程序位于我上面提到的虚拟主机中,看起来像这样(我最后删除了注释和不相关的SSL部分):

<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin email@domain.com
                ServerName 45.55.XXX.XXX
                DocumentRoot /var/www/

                <Directory /var/www/>
                        Options Indexes FollowSymLinks MultiViews
                        AllowOverride All
                        Order allow,deny
                        allow from all
                        <IfModule mod_rewrite.c>
                                RewriteEngine On
                                RewriteBase /
                                RewriteRule ^index\.php$ - [L]
                                RewriteCond %{REQUEST_FILENAME} !-f
                                RewriteCond %{REQUEST_FILENAME} !-d
                                RewriteRule . /index.php [L]
                        </IfModule>
                </Directory>
                ErrorLog ${APACHE_LOG_DIR}/error.log
                CustomLog ${APACHE_LOG_DIR}/access.log combined
                SSLEngine on
                SSLCertificateFile      /etc/apache2/ssl/domain.com.crt
                SSLCertificateKeyFile /etc/apache2/ssl/domain.com.key
                SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt

                [ ** The rest of the default ssl virtual host stuff ** ]

        </VirtualHost>
</IfModule>

确保ServerName和DocumentRoot是正确的。我认为这是子目录导致问题的地方,但是,我不是100%肯定。 如果我能找到该代码的来源,我会回来并添加一个信用。