解决wordpress里URL带中文无法访问404问题

解决wordpress里URL带中文无法访问404问题

耀鳞光翼 Lv3

问题描述

访问wordpress文章时,文章明显存在,但无法访问,显示404找不到内容,一看访问url,发现末尾有未编码的中文(一般为文章的标题)

产生原因

未编码的中文导致浏览器无法识别,找不到对应的文章内容

解决方案

1. 修改wordpress固定连接

在wordpress管理页面,设置——固定链接,修改为朴素或者数字型(只要不是含有文章名就行),这样直接用id访问标记文章,解决中文未编码问题。

固定链接
固定链接

注:这样修改基本上避免了中文未编码问题,但启用数字标记文章,在url里变成了p=123或者/123这样的类型,容易给博客带来一定的参数注入风险,增大了防范SQL注入等针对URL参数注入的难度和压力。所以本人不是很推荐

2. 设置文章别名

wordpress在发布或者更新文章的时候,提供了设置别名,这是针对URL友好设置的方式,标题可以继续使用你自定义的内容,别名仅允许英文,数字和下划线。当访问文章的时候,访问请求的url将会使用你设置的别名,而文章显示的内容依然是你自己的标题内容。这样就解决了中文未编码导致的404错误,同时根据自定义的别名访问文章,不容易被猜解,大大增加了攻击和探测路径的难度。
在所有文章页面,点击文章编辑/快速编辑,便可以看到设置别名,使用英文,数字以及下划线自定义设置文章的别名。

文章设置别名
文章设置别名

在编写文章时候,也可以直接设置链接形式,点击编辑,把其中的标题部分自己换成要设置的别名内容就可以。
文章链接设置别名
文章链接设置别名

针对wordpress分类页面404问题解决方案

wordpress在攥写文章后,可以自定义分类,每一个分类会生成一个分类管理的页面,里面可以包含你写的文章,创建完成分类后,日后的文章只要选择该分类,便可以在一个分类页面内查看所有相同分类的文章。有时候发现,分类页面显示有文章数目,但就是打不开分类页面,显示404找不到内容。
针对这个问题,解决办法一般是别名设置以及网站伪静态设置。

别名设置

在wordpress后台管理打开文章——分类,跟上面设置别名方法类似,设置自己的别名(注意:别名只能是英文字母,数字和下划线)

类别别名设置
类别别名设置

伪静态设置

如果已经完成别名设置,访问类别页面链接也已经显示你设置的别名内容,但仍然是404,这时候有可能是你的服务器/虚拟主机没有开启伪静态,这时候你需要开启网页伪静态功能。

  1. 如果你是服务器,自己安装的网站服务程序,自行搜索相应的伪静态开启方法。比如apache如何开启伪静态或者nginx伪静态配置等相关关键词。

  2. 如果你是直接使用虚拟主机或者服务商提供的主机,一般这类服务都有自己的控制面板,到你主机的控制面板查看伪静态规则配置,并开启它

    伪静态配置
    伪静态配置

  3. 如果你没有找到相关的开启方法,并且管理面板也没有开启的方法,再或者你根本不会如何开启,请联系为你提供服务的客服,让他们帮你开启并配置针对wordpress的伪静态设置或者让他们指导你如何开启自己服务器上网站程序的伪静态配置。

  4. 完成开启或者已经处于开启的状态下,某些服务商直接提供wordpress的伪静态规则,你只需要选择wordpress的规则,确认写入即可。但有些服务商需要你自己写入规则或者是你自己的服务器,自己安装的网站程序,需要自己写入规则,可以参考以下规则:
    apache规则

    将这段规则添加写入网站根目录 .htaccess 文件中(一般这个文件是隐藏的,需要你查看显示隐藏文件,如果没有,就先去wordpress后台管理设置固定链接,然后保存,这个文件便会自动生成)

    1
    2
    3
    4
    5
    6
    7
    8
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>

    Nginx规则

    这个具体需要根据我们的环境,设置到对应站点的 .conf 文件中

    1
    2
    3
    4
    5
    6
    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    # Add trailing slash to */wp-admin requests.
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;

    IIS

    这需要配置到IIS系统站点的httpd.ini文件中生效

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    [ISAPI_Rewrite]
    # Defend your computer from some worm attacks
    #RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O]
    # 3600 = 1 hour

    CacheClockRate 3600
    RepeatLimit 32

    # Protect httpd.ini and httpd.parse.errors files
    # from accessing through HTTP
    # Rules to ensure that normal content gets through

    RewriteRule /tag/(.*) /index\.php\?tag=$1
    RewriteRule /software-files/(.*) /software-files/$1 [L]
    RewriteRule /images/(.*) /images/$1 [L]
    RewriteRule /sitemap.xml /sitemap.xml [L]
    RewriteRule /favicon.ico /favicon.ico [L]
    # For file-based wordpress content (i.e. theme), admin, etc.
    RewriteRule /wp-(.*) /wp-$1 [L]
    # For normal wordpress content, via index.php
    RewriteRule ^/$ /index.php [L]
    RewriteRule /(.*) /index.php/$1 [L]
  • 标题: 解决wordpress里URL带中文无法访问404问题
  • 作者: 耀鳞光翼
  • 创建于 : 2022-07-22 14:50:12
  • 更新于 : 2024-11-14 12:26:29
  • 链接: https://blog.lightwing.top/2022/07/22/wordpress-404error/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论