DigitalOcean http://example.com 上的 Wordpress 不起作用,但 https://example.com 和 http://www.example.com 的所有其他組合都是
這對Google來說是一個難題,甚至是標題。
我可以使用這個成功地訪問我的 Wordpress 網站:
但這失敗了:
如果您嘗試從此地址訪問域,您會看到一個藍色的 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.conf
namevhost …;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:'