Wordpress

DigitalOcean http://example.com 上的 Wordpress 不起作用,但 https://example.comhttp://www.example.com 的所有其他組合都是

  • March 9, 2018

這對Google來說是一個難題,甚至是標題。

我可以使用這個成功地訪問我的 Wordpress 網站:

http://www.example.com/

https://www.example.com/

https://example.com/

但這失敗了:

http://example.com/

如果您嘗試從此地址訪問域,您會看到一個藍色的 DigitalOcean 品牌網頁,其中包含鯊魚圖片和以下錯誤:“請通過 SSH 登錄到您的 droplet 以配置您的 LAMP 安裝。”

我有一個執行帶有 Apache 2 和多個域的 Ubuntu 16.04 的 DigitalOcean 液滴。其中一個域有一個從另一台主機遷移過來的 Wordpress 站點。該域的配置與我所有其他域的配置相同,包括通過letsencrypt安裝的證書。

我不相信我的問題出在證書上。我相信這個問題與 Wordpress 有關,因為我伺服器上的其他站點在所有 4 種條件下都執行良好(http:// 和 https:// 以及 www 和非 www)

這是我的(匿名).conf 文件:

   <VirtualHost *:80>
   ServerAdmin XXXX@gmail.com
   ServerName example.com
   ServerAlias www.example.com

   DocumentRoot /var/www/example
   <Directory />
           Options FollowSymLinks
           AllowOverride All
   </Directory>
   <Directory /var/www/example>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Order allow,deny
       allow from all
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined

   <IfModule mod_dir.c>
       DirectoryIndex index.php index.pl index.cgi index.html index.xh$
   </IfModule>

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

這是我在 /var/www/example 中的 .htaccess 文件夾

       # BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
#test
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# END WordPress

這是我的 DNS 設置,已粘貼並匿名:

       CNAME   
ftp.example.com is an alias of example.com. 

A   
example.com directs to 159.65.36.136

CNAME
www.example.com is an alias of example.com. 

NS  
example.com directs to ns1.digitalocean.com.    

NS  
example.com directs to ns2.digitalocean.com.    

NS  
example.com directs to ns3.digitalocean.com.    

這是我的 apache2ctl -S 輸出

           VirtualHost configuration:
*:443                  is a NameVirtualHost
       default server othersite1.com (/etc/apache2/sites-enabled/othersite1.com-le-ssl.conf:2)
       port 443 namevhost othersite1.com (/etc/apache2/sites-enabled/othersite1.com-le-ssl.conf:2)
               alias www.othersite1.com
       port 443 namevhost othersite2.co (/etc/apache2/sites-enabled/othersite2.co-le-ssl.conf:2)
               alias www.othersite2.co
       port 443 namevhost example.com (/etc/apache2/sites-enabled/example.com-le-ssl.conf:2)
               alias www.example.com
       port 443 namevhost othersite3.com (/etc/apache2/sites-enabled/othersite3.com-le-ssl.conf:2)
               alias www.othersite3.com
       port 443 namevhost othersite4.com (/etc/apache2/sites-enabled/othersite4.com-le-ssl.conf:2)
               alias www.othersite4.com
       port 443 namevhost othersite5.net (/etc/apache2/sites-enabled/othersite5.net-le-ssl.conf:2)
               alias www.othersite5.net
       port 443 namevhost othersite6.com (/etc/apache2/sites-enabled/othersite6.com-le-ssl.conf:2)
               alias www.othersite6.com
*:80                   is a NameVirtualHost
       default server example.com (/etc/apache2/sites-enabled/000-default.conf:1)
       port 80 namevhost example.com (/etc/apache2/sites-enabled/000-default.conf:1)
       port 80 namevhost othersite1.com (/etc/apache2/sites-enabled/othersite1.com.conf:1)
               alias www.othersite1.com
       port 80 namevhost othersite2.co (/etc/apache2/sites-enabled/othersite2.co.conf:1)
               alias www.othersite2.co
       port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:1)
               alias www.example.com
       port 80 namevhost othersite3.com (/etc/apache2/sites-enabled/othersite3.com.conf:1)
               alias www.othersite3.com
       port 80 namevhost othersite4.com (/etc/apache2/sites-enabled/othersite4.com.conf:1)
               alias www.othersite4.com
       port 80 namevhost othersite5.net (/etc/apache2/sites-enabled/othersite5.net.conf:1)
               alias www.othersite5.net
       port 80 namevhost othersite6.com (/etc/apache2/sites-enabled/othersite6.com.conf:1)
               alias www.othersite6.com
   ServerRoot: "/etc/apache2"
   Main DocumentRoot: "/var/www/html"
   Main ErrorLog: "/var/log/apache2/error.log"
   Mutex rewrite-map: using_defaults
   Mutex ssl-stapling-refresh: using_defaults
   Mutex ssl-stapling: using_defaults
   Mutex ssl-cache: using_defaults
   Mutex default: dir="/var/lock/apache2" mechanism=fcntl 
   Mutex mpm-accept: using_defaults
   Mutex watchdog-callback: using_defaults
   PidFile: "/var/run/apache2/apache2.pid"
   Define: DUMP_VHOSTS
   Define: DUMP_RUN_CFG
   User: name="www-data" id=33
   Group: name="www-data" id=33

可能性 #1

它看起來像您的預設 VirtualHost *:80,使用配置文件匹配輸出頂部的000-default.confnamevhost …;example.com

VirtualHost configuration:
   default server example.com (/etc/apache2/sites-enabled/000-default.conf:1)
   port 80 namevhost example.com (/etc/apache2/sites-enabled/000-default.conf:1)

然而,你希望它在這裡匹配;

   port 80 namevhost example.com (/etc/apache2/sites-enabled/example.com.conf:1)
   alias www.example.com

可能發生的是帶有文本“請通過 SSH 登錄到您的 droplet 以配置您的 LAMP 安裝”的頁面。是來自的預設內容/var/www/html

所以我會嘗試刪除/etc/apache2/sites-enabled/000-default.conf並確保example.com匹配正確的 VHost。

可能性 #2

檢查您的設置wp-config.php,它應該與您的重定向最終指向的內容相匹配;

define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');

當它與 apache 想要的不匹配時,這有時會導致 wordpress 出現問題。

進一步的故障排除

另一件事是您已經粘貼了http://example.com:80/站點的配置;

<VirtualHost *:80>
ServerName example.com 
...
</VirtualHost>

但是,重寫規則看起來會將每個請求反彈到 https://

RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

所以我們可能還需要查看 https 配置。

此外,您可能應該粘貼與一個特定請求相關的 access.log 和 error.log 的輸出,以查看實際發生的重定向。

另外,如果還是看不到問題,可以開啟rewrite logging;

LogLevel alert rewrite:trace3

然後跟踪請求的日誌;

tail -f error_log|fgrep '[rewrite:' 

引用自:https://serverfault.com/questions/900881