问题描述
在wordpress后台更改固定链接结构后网页出现404的情况。
解决方法
在宝塔后台打开网站设置,在伪静态中加入以下代码。
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
问题原理
- With Nginx there is no directory-level configuration file like Apache’s .htaccess or IIS’s web.config files. All configuration has to be done at the server level by an administrator, and WordPress cannot modify the configuration, like it can with Apache or IIS.(Nginx没有像Apache的.htaccess或IIS的web.config文件那样的目录级配置文件。所有配置都必须由管理员在服务器级别完成,WordPress无法修改配置,就像Apache或IIS一样。)
- Since Nginx does not have .htaccess-type capability and WordPress cannot automatically modify the server configuration for you, it cannot generate the rewrite rules for you.(由于Nginx没有. htaccess类型功能,WordPress无法自动为您修改服务器配置,因此无法为您生成重写规则。)
如果你的服务器是 Nginx,那么 WordPress 自动生成的 .htaccess
文件 不会生效,因为 Nginx 根本不支持 .htaccess
文件。.htaccess
是 Apache 服务器的配置文件,而 Nginx 使用的是完全不同的配置方式。由于 Nginx 并不支持.htaccess
文件,因此你需要手动在Nginx配置中添加重写规则。
添加的Nginx服务器的重写规则,作用如下:
- 检查是否存在
index.html
:if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; }
- 如果请求的URL对应一个目录,并且该目录下存在
index.html
文件,Nginx会将请求重写到该index.html
文件并停止进一步处理。
- 检查是否存在
index.php
:if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; }
- 如果请求的URL对应一个目录,并且该目录下存在
index.php
文件,Nginx会将请求重写到该index.php
文件。
- 默认重写到
index.php
:if (!-f $request_filename){ rewrite (.*) /index.php; }
- 如果请求的URL不对应任何实际存在的文件或目录,Nginx会将请求重写到
index.php
。这是WordPress处理路由的关键部分,所有的请求都会被发送到index.php
,然后由WordPress根据URL决定显示哪个页面。
这段代码的核心是将所有不匹配实际文件的请求重写到index.php
。这正是WordPress处理固定链接的方式。WordPress通过index.php
解析URL并显示相应的内容。
不加重写规则时,服务器会按照默认行为尝试直接访问与URL路径对应的文件或目录。由于WordPress的固定链接不对应实际文件,因此会返回404错误。重写规则的作用是告诉服务器:“将所有不匹配实际文件或目录的请求交给 index.php
处理。” 这样,WordPress才能根据URL路径动态生成内容。
参考文章
【图文解释】解决wordpress更改固定链接后网页出现404;站点创建成功页面无法显示_wordpress搭建的本地网站出现网页暂时无法打开-CSDN博客
Nginx – Advanced Administration Handbook | Developer.WordPress.org