这篇文章用于记录wordpress配置中遇到的小问题,当作自己的错题本来用了。

1、伪静态配置问题

报错现象

当我迁移完博客时,发现迁移后的博客首页可以访问,但是博客下面的文章,比如https://blog.leihub.cn/archives/908这样的链接就会报404错误。

image-20251026213113444

如果我在wordpress固定链接里设置为朴素型链接,比如https://blog.leihub.cn/?p=123这样就没问题

在网上搜了一遍,初步推测是伪静态规则未正确配置 导致的。

因为朴素型链接(?p=123是 WordPress 默认的「查询字符串形式」,本质是动态 URL。它的结构是 域名/index.php?p=123(浏览器会省略 index.php,直接显示 ?p=123)。服务器收到这种请求时,会默认将 ?p=123 作为参数传递给网站根目录的 index.php 处理(因为 URL 中包含 ? 符号,服务器知道这是动态参数,需要交给 PHP 解析)。所以无论有没有伪静态规则,服务器都能正确找到 index.php 并处理请求,因此不会报错。

因为 WordPress 的 数字型链接(如 /archives/908)属于自定义固定链接,这种格式是「静态化 URL」,服务器收到这种请求时,默认逻辑是:查找是否存在对应的物理文件或目录,但实际上,/archives/908 并不是真实的文件 / 目录,而是 WordPress 为了美观和 SEO 设计的「虚拟路径」,真正处理请求的还是 index.php。需要服务器通过重写规则(Rewrite)将请求转发到 index.php 处理,否则服务器会认为该链接对应的文件不存在,从而返回 「404 Not Found」错误。

image-20251026213317811

解决方法

解决方法就是按之前提到的步骤,为 Nginx 配置正确的 rewrite 规则,或为 Apache 配置正确的 .htaccess 文件,确保虚拟路径能被转发到 index.php

Nginx

因为我使用的是宝塔面板,可以直接使用宝塔的默认模板进行配置,相对简单一点。

手动配置 Nginx 的伪静态规则:

  • 登录宝塔面板 → 左侧「网站」→ 找到你的 WordPress 站点,点击「设置」→「伪静态」。
  • 在伪静态设置页面,下拉选择「WordPress」模板(宝塔已预设好规则),点击「保存」。

image-20251026214106006

  • 若没有「WordPress」模板,手动粘贴以下规则:
location / {
try_files $uri $uri/ /index.php?$args;
}
  • 保存后,重启 Nginx 服务(宝塔「软件商店」→ 找到 Nginx → 点击「重启」)。

设置好伪静态规则后,博客就可以正常访问了。

image-20251026214432664

Apache

因为我没用Apache,这里就简单贴一下网上描述的解决方法供大家参考。

Apache 依赖网站根目录下的 .htaccess 文件实现重写,若文件缺失或权限不足会导致 404:

  • 宝塔面板 →「网站」→ 你的站点 →「文件」,进入网站根目录(如 /www/wwwroot/你的域名)。

  • 确认是否存在.htaccess文件。

    • 若不存在:新建一个 .htaccess 文件,粘贴以下内容:

    • # BEGIN WordPress
      
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]
      
      # END WordPress
      
              
      * 若存在:检查内容是否与上面一致,不一致则替换。

      * 设置文件权限:右键 `.htaccess` →「权限」,设置为 `644`(所有者读写,其他只读),确保 Apache 能读取该文件。

      * 宝塔「软件商店」→ 找到 Apache → 点击「设置」→「模块」,检查 `rewrite` 模块是否已勾选(默认已启用,若未勾选则勾选后重启 Apache)。

      ## 2、nginx将域名反代到端口后css、js、图片等样式不加载的问题

      * 2024.06.13 更新WordPress反代后CSS、JS和PNG报mixed content错误 当遇到WordPress反代后CSS、JS和PNG等资源无法加载,报mixed content错误时,这通常意味着网站中同时存在HTTP和HTTPS两种协议的请求。这种情况在博客主题内容使用CDN进行分发时尤为常见。

      ### 具体解决方案

      选择支持HTTPS的CDN:选择一个支持HTTPS的CDN服务商,如腾讯云CDN或VeryCloud,并确保正确配置SSL证书。 配置Nginx规则:对于不支持HTTPS的请求,可以通过配置Nginx规则来实现重定向。例如,对于非POST请求,可以强制重定向到HTTPS版本。

      下面将详细解释这个问题的原因及解决方案,可以尝试配置Nginx规则在反向代理配置中加入以下代码:

proxy_set_header X-Forwarded-Proto https;
proxy_redirect http:// https://;


这两行代码的作用是:

`proxy_set_header X-Forwarded-Proto https;`:这行代码告诉后端服务器,客户端使用的真实协议是HTTPS。这样,后端服务器就可以根据这个信息来生成正确的URL,确保资源请求也是通过HTTPS协议发送的。

`proxy_redirect http:// https://;`:这行代码的作用是在反向代理收到后端服务器发回的HTTP响应内容时,直接将其中的HTTP URL重定向为HTTPS URL,然后再发回给用户。这样可以确保用户最终获取到的资源也是通过HTTPS协议加载的,避免了mixed content错误。

这两种方法可以单独使用,也可以结合使用。如果使用了CDN,可以直接强制HTTPS,或者启用HSTS(HTTP Strict Transport Security),或者对资源URL进行重写,都可以解决mixed content问题。这种问题通常是因为没有使用CDN直接反代服务器导致的。

###

宝塔创建网页后,将域名([](http://chevereto.leiting2020.top/)反代到4000端口,通过在配置文件中添加一下代码实现)[http://chevereto.leiting2020.top/)反代到4000端口,通过在配置文件中添加一下代码实现](http://chevereto.leiting2020.top/)反代到4000端口,通过在配置文件中添加一下代码实现)

```nginx
location / {
proxy_pass http://blog.leihub.cn:4000/;
}

使用nginx的反向代理后,发现页面能正常跳转,可是css、js和相关的图片就是不出来,如下图

202305071823320

打开F12开发者模式,发现反代报错

image-20230507152221523

在配置中加上以下代码

location ~ .*\.(jscss)?$
{
expires 12h;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://blog.leihub.cn:4000;#4000可改为你自己起服务器本地服务的端口
error_log /dev/null;
access_log /dev/null;
}

location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://blog.leihub.cn:4000/;#4000可改为你自己起服务器本地服务的端口
}

重启nginx服务,页面正常了。