WordPress固定链接设置:6 种结构怎么选、伪静态规则怎么对上

倪叶明

作者

更新于

后台「设置 → 固定链接」里有六种结构,选一种,点页面底部的 Save Changes,然后看页面顶部出现哪条提示。提示说结构已更新,说明 .htaccess 可写,WordPress 已经替你写好了规则;提示要你更新 .htaccess,说明文件不可写,得把页面底部文本框里的规则整段复制进去。

固定链接设置这事最反直觉的地方在于,它看着只是给网址换个长相,实际上你是在给全站每一篇文章定一个永久地址。官方原话就一句,每篇文章的网址应当永久不变。定完再改,旧地址就全断了。做英文独立站的人,这一步该在建站早期定下来,别等发了几十篇再回头动。

  • 六种结构:后台提供六种可选结构,选之前先看清每种对应的示例网址。
  • 保存才生效:改完必须点 Save Changes,不点等于没改。
  • 两条提示:一条表示 .htaccess 可写、WordPress 已自动完成,另一条表示不可写、要手动复制规则。
  • Nginx 下 WordPress 生成不了重写规则,规则要在服务器层配。

这篇讲固定链接是什么、六种结构怎么选、保存后两条提示各代表什么、出问题按什么顺序回查,建站的其他步骤看 WordPress建站教程。

固定链接是什么,为什么官方说它「永远不该改」

固定链接是单篇文章、页面以及分类和标签归档的永久网址。官方文档的原话是「The URL to each post should be permanent and never change — hence the name permalink.」,意思是每篇文章的网址应当永久不变,permalink 这个名字就是从这里来的。

WordPress Nginx 官方配置 try_files 重写规则那一行
官网说明截图:Nginx 单站点配置里的 try_files 一行。

它的作用,是建立一个既方便人看、也方便搜索引擎理解和分享的网址结构。网址里带上文章标题或分类名,人一眼知道这篇讲什么,搜索引擎也能从网址里读到词。

WordPress 把固定链接分成三种类型:Plain、Pretty、Almost Pretty。三种类型的差别不在能不能访问,在网址长什么样。

三种类型:Plain、Pretty、Almost Pretty

Plain 形如 http://example.com/?p=N,p 是参数,N 是文章或页面在数据库里的唯一 ID。网址里只有一串数字,看不出内容。

Pretty 把文章标题、分类名、标签名这些词放进网址。Almost Pretty 在网址前面加 /index.php 前缀,要用这种结构,固定链接结构必须以 index.php/ 开头。

Plain 在所有服务器环境下都能工作,这是它的好处。缺点也直接:对用户不友好,网址里没有能看出内容的词。

官方为什么把 Plain 列为默认却不推荐

WordPress 装好之后默认用的是 Plain,这个默认值是安装时自动配置的。默认不等于推荐,它只说明这个结构在任何服务器上都能跑起来。

Plain 的缺点很清楚:网址里只有一串数字,对用户不友好,也没有为搜索引擎优化。想换成 Pretty,主机商那边应当已经把必要的服务器配置做好了;如果没有做好,需要联系主机商。

网址结构定下来之后,页面怎么呈现是主题的事。固定链接管网址,主题管页面,主题对 SEO 的影响写在 WordPress主题SEO影响 这篇里。

六种结构长什么样,各自适合什么站

固定链接页面提供六种可选结构,每一种对应一种网址长相。下面是六种结构的示例和说明。

WordPress固定链接设置页面六种结构选项与示例网址
实操截图:后台六种结构选项,每种旁边都带示例网址。
结构 示例网址 说明
Plain http://example.com/?p=N 用文章 ID,最短,对用户不友好,没有为搜索引擎优化
Day and name http://www.sample.com/2008/03/31/sample-post/ 年月日加文章名
Month and name http://www.sample.com/2008/03/sample-post/ 年月加文章名
Numeric http://www.sample.com/archives/123 用文章 ID,带 archives 前缀
Post name http://www.sample.com/sample-post 只带文章名
Custom Structure /archives/%year%/%monthnum%/%day%/%postname%/ 用结构标签自己拼,这是官方给的示例

六种结构的区别就两件事:网址里放不放日期,用标题还是用 ID 定位文章。日期放得越多,网址越长;用 ID 网址稳定,但看不出内容。选哪种,看你要网址承担什么。想让人从网址看出内容,Post name 和 Month and name 都行,前者短,后者带月份。想用编号定位、不在乎网址好不好看,选 Numeric。要加固定前缀,用 Custom Structure,比如在文章名前加 /archives/。

分类基础和标签基础:能改,但不能从网址里去掉

分类基础默认是 category,标签基础默认是 tag。这两个值在同一个页面的 Optional 设置区填,留空就用默认值。可以改,但不能从网址里完全去掉。

比如把分类基础改成 /topics/,分类链接会变成 http://example.org/topics/uncategorized/ 这样。改的是前缀,不是把这一段删掉。

一篇文章多个分类时,网址里显示哪个

一篇文章属于多个分类时,固定链接里只显示一个分类。显示哪个由字母顺序决定,不是由你勾选的顺序决定。

想自己指定哪个分类出现在网址里,可以用插件目录里的插件。装之前先确认插件还在更新。

自定义结构怎么写:结构标签和结尾规则

在固定链接页面选 Custom Structure,然后在输入框里用结构标签拼。标签是 WordPress 认的占位符,保存后会替换成每篇文章对应的内容。

常用的标签有五个,分别对应年份、月份、日期、文章 ID 和文章标题。下面逐个说。

%year% / %monthnum% / %day% / %post_id% / %postname% 各是什么

%year% 是四位年份,比如 2018。%monthnum% 是两位月份,比如 05。%day% 是两位日期,比如 28。%post_id% 是文章唯一 ID,比如 423。%postname% 是文章标题净化后的版本,比如标题「This Is A Great Post!」在网址里会变成 this-is-a-great-post。

前三个是日期标签,决定网址里出现不出现日期、出现到哪一级。%post_id% 和 %postname% 是定位标签,决定用编号还是用标题来指向一篇文章。

日期标签不是必须的。只写 %postname%,网址就是 /sample-post 这种样子。写全 %year%/%monthnum%/%day%/%postname%,网址就是 /2018/05/28/sample-post 这种样子。

为什么必须以 %post_id% 或 %postname% 结尾

自定义结构必须以 %post_id% 或 %postname% 结尾,WordPress 才能为每个固定链接定位到具体哪一篇文章。网址里只有年份和月份,WordPress 不知道你要打开哪一篇。

这一条是硬规则,不是建议。结构里没有定位标签,WordPress 没法知道每个网址对应哪篇文章。

字段里不能填网站网址

固定链接字段里不要填网站网址,只能用结构标签或标签组合。把 https://example.com/ 这种完整地址填进去,填法不对。

字段里只放结构标签,别的都不写。

保存后两条提示分别什么意思,伪静态规则怎么对上

伪静态就是让动态生成的网址看起来像静态页面的地址。WordPress 的固定链接靠服务器重写规则来实现,保存固定链接时,WordPress 会尝试把规则写进 .htaccess。

WordPress固定链接保存后顶部提示与底部重写规则文本框
实操截图:保存后看顶部提示,底部文本框就是手动补规则的地方。

保存后页面顶部会出现两条提示之一。一条表示固定链接结构已更新,另一条提示你要更新 .htaccess。看到哪条,决定你接下来要不要动文件。

看到「Permalink structure updated.」:.htaccess 可写,已自动完成

如果 .htaccess 可写,页面顶部会显示这条提示,意思是 WordPress 已经把全部工作做完了,你不需要再动任何文件。

这时候去前台打开一篇文章、一个分类页,能正常打开就说明规则生效了。打不开再往下查。

看到提示要更新 .htaccess:手动复制规则的三步

如果 .htaccess 不可写,页面顶部会出现一条提示,要你更新 .htaccess。页面底部会出现一个文本框,里面是与所选结构对应的多行重写规则。

  1. 在页面底部的文本框里点一下,按 CTRL + a 全选,把里面的规则全部复制出来。
  2. 用 FTP 或主机商的文件管理器打开网站根目录下的 .htaccess 文件,把复制的内容粘贴进去,保存。
  3. 回到网站前台,打开一篇文章和一个分类页,看能不能正常打开。

在本地电脑上创建 .htaccess 时,有些操作系统不允许文件名以点开头。可以先命名成 htaccess.txt,上传后再用 FTP 软件改名。以点开头的文件在多数服务器上默认隐藏,需要在 FTP 软件里打开显示隐藏文件的选项。

Nginx 下为什么生成不了规则,官方 try_files 那一行在做什么

Nginx 没有类似 Apache .htaccess 的目录级配置文件,所有配置都要由管理员在服务器层完成,WordPress 改不了服务器配置。所以 Nginx 下 WordPress 没法自动生成重写规则。

Nginx 官方配置里,单站点通用规则的核心是这一行:

try_files $uri $uri/ /index.php?$args;

这一行先看请求的文件在不在,再看不带斜杠的目录在不在,都不在就把请求交给 index.php 处理。后面的 ?$args 要把查询字符串带上,不加的话,非默认固定链接在带参数时会失效。

不做修改的情况下,Nginx 环境会在固定链接里加上 index.php。缓解办法有两个,用插件,或在子主题的 functions.php 里加自定义代码。

访问固定链接页面就会刷新重写规则,不必为了刷新而保存

访问固定链接页面这个动作本身就会触发重写规则刷新,不需要专门为了刷新去点一次 Save Changes。这条对改了主题或插件、想刷新规则的人有用。

主题和插件也会往重写规则里加东西,主题这一层对 SEO 的影响写在 主题对SEO的影响 这篇里。

改完固定链接旧链接打不开,按这个顺序回查

改完固定链接,旧链接打不开,按下面四步回查,从最省事的一步开始。每步做完都去前台打开一篇文章试一下,能打开就停,打不开再往下走。

网站根目录 .htaccess 里的 WordPress 固定链接重写规则
实操截图:根目录 .htaccess 里确认有没有那几行重写规则。

第一步,看保存后的提示

回到 设置 → 固定链接,看页面顶部有没有提示。如果提示要你更新 .htaccess,说明规则没写进去,先按上一节的三步手动补。如果没有提示,往下走。

第二步,看 .htaccess 里有没有那几行规则

用 FTP 或文件管理器打开网站根目录的 .htaccess,确认里面有没有 WordPress 的重写规则。如果没有,或者只有一半,说明复制没成功,重新复制一遍。保存后再打开一篇文章试。

第三步,看服务器类型是不是 Nginx

如果主机用的是 Nginx,WordPress 不会自动写规则,.htaccess 在这个环境里也不起作用。规则要由服务器管理员在 Nginx 配置里加,核心就是上一节那行 try_files。自己管服务器的话,改配置前先备份。

第四步,看分类基础和标签基础有没有被改过

如果文章页能打开,分类页或标签页打不开,回头看 Optional 设置区的分类基础和标签基础。这两个值改过之后,分类和标签的网址前缀跟着变,之前发出去的分类链接要对一遍新前缀。

这 4 件事官方明确说了不行

以为不点保存也会生效

改完结构不点保存,设置不会生效。后台不会因为你选了单选按钮就改网址,要手动提交一次。

以为 Plain 对 SEO 没影响

Plain 的网址里只有数字,看不出内容。官方对它的评价是对用户不友好,也没有为搜索引擎优化。想让人从网址里看出内容,Plain 做不到。

以为 Nginx 下 WordPress 能自己写规则

Nginx 没有 .htaccess 这种目录级配置文件,规则不在网站根目录里。想在 Nginx 下用 Pretty 固定链接,得找服务器管理员在服务器层配。

以为分类基础可以从网址里彻底去掉

把输入框留空,用的是默认值 category 和 tag。改前缀可以,把这一段整个删掉不行。

用 AI 帮你核对重写规则和旧链接清单

AI 在这件事上能帮的,是把规则和清单整理成你能照着做的形式,不是替你做决定。规则对不对,还得你对着后台和服务器看。

AI 能帮的三步

先把官方 Nginx 单站点规则和你的主机类型一起丢给 AI,让它逐行解释 try_files $uri $uri/ /index.php?$args 这一行在做什么,以及去掉 ?$args 会出什么问题。

再来,让 AI 根据你选的结构标签生成一份「结构 → 示例网址」对照表,你在后台逐项比对。这一步省的是你自己拼示例的时间。

还有个事,改完固定链接后,让 AI 帮你把旧网址清单和新网址清单做成一一对应的跳转表,再人工逐条确认。建站阶段的检查可以交给猎者出海的AI Agent,它的建站功能从空服务器到上线分十个阶段,每段一道关,固定链接这种基础设置在那一阶段定下来,比上线后再改省事。

人必须亲手做的三件事

第一,在后台 设置 → 固定链接 页面亲手勾选结构选项,并点 Save Changes。第二,看保存后页面顶部出现的是哪条提示,据此决定要不要手动改 .htaccess。第三,如果 .htaccess 不可写,亲手把页面底部文本框里的规则全选复制,粘贴进 .htaccess 并保存。

这三件事 AI 替不了,因为它看不到你的后台,也改不了你服务器上的文件。

三条可以直接复制的提示词

下面三条提示词是本文给的示例,不是官方模板,可以直接复制改。

  • 「下面这段是 WordPress 官方 Nginx 单站点配置里的 location / 段,请逐行解释每一行的作用,重点说明 try_files $uri $uri/ /index.php?$args 里 $args 的作用,以及删掉它会怎样。不要给排名建议。」
  • 「我准备把 WordPress 固定链接从 Plain 改成 Post name,下面是我的旧网址清单和新网址清单,请生成一张跳转对照表,两列:旧网址、新网址。不要编造我没给的网址。」
  • 「下面是我后台固定链接页面底部文本框里的重写规则,请整理成一份操作清单:先做什么、再做什么、最后检查什么。只基于我给的内容,不要补充其他规则。」

常见问题

固定链接保存后提示要更新 .htaccess,不处理会怎样?

文章页、分类页这些靠重写规则打开的地址会打不开。页面底部文本框里的规则就是给你手动补的,复制进 .htaccess 保存就行。

固定链接里能不能不显示日期?

可以。选 Post name,或者在 Custom Structure 里只用 %postname%。日期标签不是必须的。

用 Nginx 的站,固定链接里为什么会多出 index.php?

Nginx 下 WordPress 改不了服务器配置,不做修改时网址会带上 index.php。这个前缀不是后台能删掉的,得从服务器配置或主题代码那边处理。

分类基础和标签基础留空会怎样?

留空用的是默认值 category 和 tag。前缀能换,这一段本身去不掉。

固定链接改完,旧文章的网址还能保住吗?

旧网址不会自动跟着变,改结构之后旧地址就失效了。改之前先把旧网址清单存一份,改完逐条对。

自定义结构以 %post_id% 结尾和以 %postname% 结尾有什么区别?

%post_id% 是文章在数据库里的编号,%postname% 是文章标题净化后的文字。两种都能让 WordPress 定位到具体一篇文章,区别在网址里是一串数字还是一串标题词。

固定链接是建站早期就能定下来的东西。定完之后,把旧网址清单留一份,把 .htaccess 或 Nginx 规则对一遍,后面换主题、换服务器、换域名都省事。真要动手,还是你自己在后台点那一下 Save Changes。

发表评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注