WordPress Woocommerce 网站 : Force SSL on Account page causes Internal Server Error

标签 wordpress .htaccess ssl https woocommerce

我花了几个小时搜索并发现了许多类似的问题,但他们的解决方案不起作用或没有解决方案,所以这里是:

我正在迁移一个在 Wordpress 上运行 Woocommerce 的站点 - 它在当前服务器上 100% 工作,但必须移动。在新服务器(Digital Ocean 上的 Ubuntu 14.04)上,所有页面都在工作,除了涉及“ssl”的地方。我在服务器上安装了一个有效的证书,但是证书上的域与站点的域不匹配,因为我还没有将名称服务器指向我的新服务器。现在,我正在使用子目录中的 IP 地址运行站点,如下所示:

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

如果我在 Woocommerce 中禁用强制 SSL 选项,帐户和结帐页面可以正常工作。但我需要他们使用 SSL 来确保安全。 如果我在 Woocommerce > 设置 > 结帐中启用“强制 SSL”,帐户和结帐页面会显示内部服务器错误。 FWIW,我尝试禁用 Woocommerce 的 Force 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/”的两个实例(即假装我没有在子目录中工作)。 当我这样做时,帐户和结帐页面将以 https 加载(!),但不会加载任何 javascript 或 CSS 文件,因为它们都在“http”中,这会触发混合内容警告。所以尽管我可以看到这些页面的内容,但它们看起来很糟糕并且无法正常工作。最后,没有其他页面将在这个新的 .htaccess 文件下工作,因为服务器正在为它们查找错误的目录。

我完全被难住了,而且我发现其他人也同样被相关问题难住了。

我确定如果我得到任何日志记录,我会被指向正确的方向,但我已经关注了所有可能的线程,而且我的日志记录似乎确实配置正确。在/var/log/apache2/error.log 中,我有一些杂项日志,我认为它们仅与我重新加载 apache 时有关——与此 https 错误无关。我的 php.ini 文件已打开 log_error,应该记录到/var/log/php_errors.log(我创建的文件),但该文件是空的。

感谢任何帮助!

最佳答案

好吧,我一次更改了三件事情,但我无法确定哪一件解决了问题,所以我会列出所有这些,以防其他人遇到同样的情况。

首先,我意识到在我的 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% 确定。 如果我能找到该代码的来源,我会回来并添加信用。

关于WordPress Woocommerce 网站 : Force SSL on Account page causes Internal Server Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30511427/

相关文章:

mysql - 带有 post_where 和多个关系键的嵌套元查询

php - IIS7 上带有漂亮 url(url 重写)的 WordPress Gravity 表单

javascript - 单击弹出图像和生物框

wordpress - 使用 S3 作为 nginx 的后备在第一个 "few"加载时失败

apache - 从子目录中的 URL 中删除 .php

php - Wordpress(在 Rackspace 服务器上)强制整个网站通过 SSL,除了一页

javascript - Firefox 处理 window.onpopstate 的方式与 Chrome 和 Safari 不同吗?

php - 相当于Apache + php-fpm下的php_value

asp.net - rabbitMQ.Client in .NET System.IO.IOException : connection. start 从未收到,可能是由于网络超时

postgresql - 尝试通过 JDBC 与 Postgres 进行 SSL 连接时出现 PSQLException "Could not open SSL root certificate file"