我尝试使用域名设置我的服务器,但在浏览器中输入 URL 时出现 301 错误。(http://localhost 工作正常,但http://example.com产生 301 错误)。
我已将 DNS 服务器指向正确的公共 IP,并将路由器设置为将传入的 80 端口转发到本地 80 端口,再转发到正确的私有 IP。
apache2.conf
修改如下
#<Directory /var/www/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#</Directory>
<Directory /srv/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
这是为了将 Wordpress 安装在建议的位置/srv/www/wordpress/
,而不需要网站的其他默认 Apache 位置......
wordpress.conf
文件夹中的/etc/apache2/sites-enabled/
内容如下:
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
DocumentRoot /srv/www/wordpress
<Directory /srv/www/wordpress>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Require all granted
</Directory>
<Directory /srv/www/wordpress/wp-content>
Options FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
我正在使用 Ubuntu 20.04、Apache 2.4.41、Wordpress 5.8.1
2021 年 9 月 23 日更新
将此问题的标题从“Apache 服务器上出现 301 错误”编辑为“Wordpress 无法访问 Localhost”。以前,当我http://example.com
从运行服务器的本地网络输入我的域名 () 时,我总是得到一个“超时”响应。301 错误发生在当时另一个人访问我的域名时外部。现在我找到了一种从外部访问我的域的方法,错误始终是:“Localhost 无法访问”。顺便说一句,这似乎只发生在 Wordpress 网站上;当我访问默认的“It Works”网站时,一切都很好(我取消了之前突出显示的行的注释)。这可能是因为 Wordpress 使用数据库,而用户的apache2.conf
默认设置是?hostname
"localhost"
[对于那些试图输入指向其服务器的域的人:如果您从服务器所在的同一本地网络执行此操作,它将不起作用(搜索“NAT 环回”以了解更多信息)。这不是这里的讨论,但我提到它是因为它花费了很多时间;localhost
有效,修改/etc/hosts
可以做一些作弊——据我所知仍然不能模拟外部请求——但最终,使用域名将不起作用。]
答案1
因此,解决方法是更新 Wordpress 数据库。具体操作如下:
访问您的 Wordpress 帐户后,只需在“设置”->“常规”中更改 Wordpress URL 和站点 URL:
WordPress Address (URL): <site_URL_here>
Site Address (URL): <site_URL_here>
或者
可以访问您的 Wordpress 数据库
- 使用你的 wordpress 站点的用户名登录 mysql(如果你忘记了你的用户名,它位于你的 wordpress 站点根目录中的 wp-config.php 中;相应的密码也在那里)
mysql -u <user_name_here> -p
- 选择你网站的数据库(如果你忘记了,wp-config.php 可以帮你解决)
use <database_name_here>
- 关键步骤:更新“home”和“siteurl”记录(wordpress官方文件注意,你应该省略 URL 上的任何尾随“/”)
UPDATE wp_options SET option_value="http://<site_URL_here>" WHERE option_name="home";
UPDATE wp_options SET option_value="http://<site_URL_here>" WHERE option_name="siteurl";
- 检查数据库记录是否刚刚更新
SELECT * FROM wp_options WHERE option_name = "home" OR option_name = "siteurl";
这就是这个问题的全部内容。
关于能否通过新地址访问您的网站:
如果 wordpress 网站托管在您自己的本地网络上,如上所述,您将无法从内部访问它,即从同一本地网络(包括服务器)上的设备访问它;无论是通过 localhost 还是您在上述步骤中输入的 URL,都无法工作。您只能从外部访问该网站(例如,从使用数据的手机、从朋友网络上的某台计算机、从工作中的计算机等)。因为这很麻烦,所以我找到了两个选项,以便您仍然可以从内部访问该网站:i) 您有一个可以处理 NAT 环回的路由器 ii) 您使用虚拟专用网络
我没有测试过 (i),但我知道 (ii) 有效,因为我就是这么做的。当 VPN 开启时,导航到您的 URL,您将能够看到该网站。
我认为这一点应该得到更多人的关注,以便了解如何在本地网络上设置和创建 Wordpress 站点