这是一个很难用谷歌搜索到的问题,甚至是标题。
我可以使用以下命令成功访问我的 Wordpress 网站:
但这失败了:
如果您尝试从该地址访问域名,您会看到一个蓝色的 DigitalOcean 品牌网页,上面有一张鲨鱼图片,并显示以下错误:“请通过 SSH 登录您的 droplet 以配置您的 LAMP 安装。”
我有一个 DigitalOcean droplet,运行 Ubuntu 16.04,带有 Apache 2 和多个域。其中一个域有一个从另一台主机迁移过来的 Wordpress 网站。该域的配置与我所有其他域相同,包括通过 letsencrypt 安装的证书。
我不认为我的问题出在证书上。我认为问题与 Wordpress 有关,因为我的服务器上的其他网站在所有 4 种情况下(http:// 和 https:// 以及 www 和非 www)都运行正常
这是我的(匿名).conf 文件:
<VirtualHost *:80>
ServerAdmin [email protected]
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
可能性 #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');
当 wordpress 与 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 的输出,以查看实际发生了哪些重定向。
另外,如果您仍然看不到问题,您可以打开重写日志;
LogLevel alert rewrite:trace3
然后跟踪日志中的请求;
tail -f error_log|fgrep '[rewrite:'