跳至内容

WordPress开发中url相关的坑

Karson Zhong · Posted on 2023-08-09 · 10 Views

这是一篇很短、很散的文章,但缘分到了它可能拯救你两三天人生。

直接开说,WordPress URL会有什么坑:

url非法字符

注意,并不是所有ASCII字符都是合法字符
根据RFC 3986,合法内容只有以下几个
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=
其它一切字符,都应该转义为%hh形式

如果你企图使用|等字符作为查询字符串的内联分隔符key=foo|bar,那恭喜你,成功踩到深坑

这些特殊字符会在重定向时被WordPress清除,上面例子变成key=foobar
而且只有在重定向时才会发生,因此非常难发现错误!

重复查询字符串

不要使用重复的查询字符键key=a&key=b

否则只有最后一个值能被传入

蛇皮谷歌好像用过重复查询字符键,害了不少人

保留的关键词

WordPress有一些保留关键词,为了避免暴毙最好不要尝试以下“作死”行为:

  1. 手动将它们加入 $_GET$_POST 数组
  2. 注册同名的taxonomy或或者slug
  3. 使用同名的查询字符键

注意:当你注册了taxonomy且提供了rewrite参数时,rewrite的值也会注册为已使用的关键词,它们在查询字符串中已有本身的含义(代表该taxonomy),不要再拿来当其它作用。

url重写规则

小坑

在使用add_rewrite_rule添加重写规则时,需要留意第二个参数query
这个东西必须是以index.php开头,然后后面跟所需的查询字符串(WordPress里一切路径数据都是查询字符串)

比如加载id为501的文章:
add_rewrite_rule('^testpage/?', 'index.php?p=501', 'top');

如果你需要重定向,请使用template_redirect hook

如果你尝试输入index.php以外的东西,祝你好运:)

大坑

使用add_rewrite_rule之后,必须刷新永久链接。你有两个做法:

  • 在php中运行flush_rewrite_rules()函数
    • flush_rewrite_rules()很慢,不要每次运行都执行,特别是在product环境
  • 在控制台中,找到:设置>固定链接>保存更改

程序员,热衷于游戏开发和软件制作。但也是一个杂食动物,喜欢探索各种赛博相关的奇技淫巧。

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

Nova - rebirth of a wonderful theme.

Theme Nova by KarsonJo

  • Serif
  • Sans Serif
切换主题 | SCHEME TOOL
Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
0
希望看到您的想法,请您发表评论x
0
希望看到您的想法,请您发表评论x