WordPress 地址、网站地址、主页和站点 URL|详解
为了清晰地理解这些相关性,我进行了各种测试,因为在进行调试时很容易造成混乱。
如果要实际运行,请在测试环境下进行。请注意,如果在正式环境中操作可能会导致网站无法显示。
得出结论
我首先会简单总结一下这次各种测试中所了解的内容。
WordPress网址 (URL)
WordPress管理界面的地址(url)将会是安装有WP核心文件的路径。
如果在数据库的wp_options表的siteurl字段或者wp-config.php文件中设置了define(‘WP_SITEURL’),则会显示该值。
网站地址 (URL)
如果管理界面的网址被设定为WP的首页地址,那么它将显示在数据库wp_options表中的home或wp-config.php中已设置的define( ‘WP_HOME’ )的值。
site_url()的返回值
如果在数据库的wp_options表中设置了siteurl或在wp-config.php中设置了define(‘WP_SITEURL’),则将返回该值。换句话说,将返回WordPress管理页面的地址(url)。
回到home_url()的结果。
如果数据库的wp_options表中的home或者wp-config.php中的define(‘WP_HOME’)已经设置,则返回其值。
换句话说,返回管理界面的网址。
在wp-config.php文件中的配置
在define函数中设置的是常量。它并不改变数据库的值。
此外,在define函数中设置WP_SITEURL和WP_HOME之后,将无法通过管理界面进行编辑,
也无法使用wp-cli进行命令操作。
您可以通过使用SQL语句或PHPMyAdmin等工具来更改数据库的值。
需要注意的是,在更改数据库值后,您必须删除`wp-config.php`中的WP_SITEURL和WP_HOME才能使更改生效。
这是因为WP_SITEURL和WP_HOME的设置具有优先于数据库值的特性。
我将逐一列举测试的详细内容。
前提 tí)
为了方便理解,将WordPress安装在子目录(/wordpress)中。
请参考以下的安装方法。
我在本次测试中使用Docker搭建了本地环境并进行了实施。
WordPress地址和网站地址的管理页面。
当您使用上述方法完成安装后,设置将如下所示。
WordPress网址为http://example.com/wordpress。
网站网址为http://example.com。
WordPress的网址(URL)表示安装有WP核心文件的路径。
例如index.php、wp-config.php、wp-content目录、wp-admin和wp-include等位置。
网站地址的作用是告诉WordPress顶级页面的地址。
尝试确认一下数据库的值
在数据库中,这些值被保存在名为home和siteurl的字段中,我们来确认一下这些值。
SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
首页 http://example.com
网址 http://example.com/wordpress
wp_options表中的siteurl已反映在后台的WordPress地址(URL)中。
wp_options表中的home已反映在后台的网站地址(URL)中。
我了解了这件事情。
需要注意的是命名出现了扭曲。
管理页面的网址(URL)与浏览器访问的网址不同。
我试着从管理面板中将网站地址(url)更改为以下内容。
http://example.com/wordpress – 请提供 http://example.com/wordpress 的中文转述。
在这个状态下,尝试从浏览器访问http://example.com/wordpress。
可能会没有任何显示。
在我的环境下会出现500错误。
接下来,我们进入子目录访问http://example.com。
会展示顶层页面。
我想要确认的一点是,当在浏览器中输入http://example.com时,管理页面的网址(URL)不会受到影响。
那么,影响会出现在哪里呢?
在管理界面的左上方有一个房子图标→显示网站
这里的链接目标已经改变。
当WordPress在生成和转换URL时,也会产生影响。
以下是WordPress在内部生成和转换URL的具体示例。
让我们实际上观察一下内部生成和转换URL的过程。
在管理页→左侧菜单的设置→固定链接中,您会看到类似于http://example.com/wordpress?p=123这样的形式。
这与管理界面的网站地址(url)相关。因此,若将管理界面的网站地址(url)更改为http://example.com/,则会变为http://example.com/?p=123。
再次在这里稍微有些专业的事情,你可以选择跳过阅读,但是$post->guid通过获取http://example.com/?p=111111这样的链接会受到影响。这是WordPress管理的唯一地址,永久链接会将此地址转换为基本信息并为URL进行转换。同时,在生成URL时,它会反映管理界面的网站地址(url)。
我在我的测试环境中将永久链接设置为%postname%。这样一来,通过永久链接,http://example.com/?p=111111 这样的链接将根据管理界面的网站地址(URL)来生成URL。
如果出现只有发布页面的链接无效的情况,也可以通过检查是否使用了$post->guid来获取URL来确认。
其他受影响的函数们
由于以下的功能比较容易理解,我将举例来说明。
主页链接()
home_url()将返回在管理界面中设置的网站地址(url)的值。
在这里需要注意的是,管理页面的网站地址(url)有时是通过wp_options数据库表中的home字段进行定义的,有时也可能是通过wp-config.php中的define(’WP_HOME’)来修改的。
如果在wp-config.php文件中使用define( ‘WP_HOME’ ),那么该值将被优先返回作为返回值。
如果没有使用该选项,则将返回数据库的wp_options表中的home作为返回值。
网站链接()
site_url()函数返回在WordPress管理页面上设置的网址值。
在这里需要注意的是,WordPress管理页面的地址(URL)可能是通过数据库的wp_options表的siteurl字段确定的,也可能是通过在wp-config.php文件中使用define( ‘WP_SITEURL’ )来修改的。
如果在wp-config.php中使用了define(‘WP_SITEURL’),则该值将被优先使用并返回为返回值。
如果没有使用,则将返回数据库中wp_options表中的siteurl作为返回值。
※根据定义导致的变更注意事项
当无法登录管理页面时常常使用的方法是在根目录的wp-config.php文件中添加以下内容,即可进行更改。
define( 'WP_HOME', 'http://example.com' );
define( 'WP_SITEURL', 'http://example.com/wordpress' );
在此我想要注意的是上述的define()是一个用于定义常量的PHP函数,它只定义了WP_HOME和WP_SITEURL这两个常量。
因此,数据库的值不会改变。
通过使用mysql命令等确认wp_options表中的home和wp_options表中的siteurl的值,可以知道它们没有改变。
然而,在WordPress的管理界面中的WordPress地址(URL)和站点地址(URL)以及home_url()和site_url()的返回值中,会反映这些变化。
我认为很可能通过使用define命令来指定常量,WordPress会在不读取数据库的情况下临时应用这些值。
在涉及URL的函数中,最好考虑到至少其中一个会受到影响。
设置方法有四种模式。
以下是四种设置WordPress管理面板地址(url)和网站地址(url)的方式:
从管理界面
在管理面板中,从设置到一般,设置WordPress地址(url)和站点地址(url)是一种非常常见的模式。
如果WordPress网址和网站地址被灰化,无法编辑,则无法做出修改。
如果这里变为灰色,无法编辑的话,可能是在以下的wp-config.php中进行了设置。
要解除它,请直接编辑下面提到的sql,并将其恢复为当前在管理画面中设置的值,然后删除wp-config.php中定义的WP_HOME和WP_SITEURL行,这样就可以从管理画面中进行编辑了。
※如果编辑的顺序错误,可能会导致网站无法显示的错误,请注意。
wp-config.php 可以被视为 WordPress 的核心配置文件。
下面是在WordPress根目录中的wp-config.php文件中添加的模式。即使无法登录管理界面,只要通过FTP可以修改wp-config.php文件,就可以进行修复操作。这个模式所做的是设置WP_HOME和WP_SITEURL这两个常量。通过这种方式,这些常量将覆盖管理界面的值,但是数据库中的值并没有改变。
define( 'WP_HOME', 'http://example.com' );
define( 'WP_SITEURL', 'http://example.com/wordpress' );
如果添加了上述内容,管理界面的站点地址(URL)和WordPress地址(URL)的值将被反映。(不能再更改)
同时,home_url()和site_url()的返回值也将被反映。
而且,如果设置了这个配置,后续使用wp-cli命令进行的更改也将无效。
这时将会出现以下错误。
# wp option update --allow-root home 'http://example.com'
Error: Could not update option 'home'.
顺便说一句,可以通过数据库命令来更改选项中的home和siteurl。但是毫无疑问,管理界面的值,以及home_url()和site_url()的返回值会受到WP_HOME和WP_SITEURL这两个常量覆盖的值的影响。观察到这些行为,我们可以看出数据库的值和常量WP_HOME、WP_SITEURL被视为完全不同的东西。
wp-cli 是一个用于管理 WordPress 网站的命令行工具。
在使用WordPress的命令行工具wp-cli进行设置也是非常方便的。
在创建Docker容器时,可以通过将以下命令嵌入来进行配置。
wp option update --allow-root home 'https://example.com'
wp option update --allow-root siteurl 'https://example.com/wordpress'
数据库的命令 (DB de ming ling)
这是通过数据库命令直接更改的方法。
UPDATE wp_options SET option_value = 'http://www.example.com' where option_name IN ('home');
UPDATE wp_options SET option_value = 'http://www.example.com' where option_name IN ('siteurl');
无论在wp-config.php中指定常量与否,都可以修改数据库的值。
但是WordPress优先使用wp-config.php中的常量进行反映。
如果数据库更改后没有反映,请确认wp-config.php中是否指定了常量WP_HOME和WP_SITEURL。
如果您不擅长命令操作,我认为使用phpmyadmin在GUI环境中运行数据库的sql也可以。
.htaccess文件是用来做什么的?
.htaccess是用于配置Apache服务器的文件。
在这个Apache服务器上,需要单独配置域名。
当访问被设置的域名时,该.htaccess文件添加了配置来决定运行哪个文件。
所以,如果安装到子目录的情况下,可能会产生需要编辑子目录的情况,导致混淆不清。
.htaccess是Apache的配置文件
wp-config.php是WordPress的配置文件
并且在数据库中也有一些配置
如果知道设置了URL和WordPress的安装目录,可能更容易区分问题。
結尾
如果你曾经架设过服务器,你可能会理解.htaccess的作用,以及其他一些内容。但即使没有这方面的经验,也容易混淆。特别是管理界面的显示可能会稍微有些混乱,所以需要注意。
如果有任何错误,请您指正,我会非常高兴。