【问题标题】:Wordpress Woocommerce site: Force SSL on Account page causes Internal Server ErrorWordpress Woocommerce 网站:在帐户页面上强制 SSL 导致内部服务器错误
【发布时间】:2015-08-11 05:58:06
【问题描述】:

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

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

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

如果我在 Woocommerce 中禁用强制 SSL 选项,帐户和结帐页面可以正常工作。但我需要他们使用 SSL 来保证安全。 如果我在 Woocommerce>Settings>Checkout 中启用“强制 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 (我创建的一个文件),但这个文件是空的。

感谢任何帮助!

【问题讨论】:

    标签: wordpress .htaccess ssl https woocommerce


    【解决方案1】:

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

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

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

    第三,我实施了一个我在一些博客或文章中找到的修复程序(我现在终生无法找到)。修复在我上面提到的虚拟主机中,看起来像这样(我在最后删除了 cmets 和不相关的 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% 确定。 如果我能找到该代码的来源,我会回来加分。

    【讨论】:

      猜你喜欢
      • 2020-04-02
      • 2018-05-31
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多