WordPress如何处理URL?

3
我在WordPress中遇到了这个(对我来说)不熟悉的行为。
考虑一个使用WordPress的随机站点,其中包含一个名为“example”的页面,但没有内容。这只是一种页面类型的帖子,而不是类别、标签或任何层次结构。如果在最后一个“/”后添加字符,则会触发404错误:

http://example.com/example/abc

我希望如果在最后一个“/”之后只输入数字,就不会触发404错误。例如加载:

http://example.com/example/1123456

将我带到“example”页面并将数字保留在URL中。 在这种情况下,数字没有特殊含义。 可以有任何数字,但我希望它会像其他网站一样触发404。
在索引或类别页面将数字附加到URL仍然似乎会触发404,但不会在文章和页面上触发404。
我想知道这是否是WordPress的实际功能,如果是,那么它的目的是什么?

EXTRA_CHARACTERS 是什么?页面/文章/分类? - Helping Hands
1
你正在使用的是漂亮链接,请参考此页面 https://codex.wordpress.org/Using_Permalinks。 - Sugumar Venkatesan
实际上,WordPress为每篇文章生成唯一的ID,这与永久链接有关。当您的永久链接设置为默认时,URL将类似于www.example.com/id=10,如果您设置了任何自定义永久链接,则将根据该设置进行设置。您之所以会收到404错误,是因为您的永久链接结构未设置为“文章名称”的自定义结构。此外,要应用此设置,您需要通过.htaccess允许使用mod_rewrite - Helping Hands
那么我认为您需要通过htaccess手动定义规则。 - Helping Hands
@HelpingHands 问题是我不想- 我想利用这个功能,以便在用户输入该URL进入页面时显示正确的图像。感谢您的帮助。 - PeterTheLobster
显示剩余6条评论
3个回答

4
这是按设计的方式进行的。WordPress通过内置的重写模块匹配URL。您可以在此处阅读有关此内容的信息。此外,跟踪此过程中发生的情况的源代码位于wp-content/class-wp-rewrite.php中。
提供您所看到行为的具体行如下。
[(.?.+?)(?:/([0-9]+))?/?$] => index.php?pagename=$matches[1]&page=$matches[2]

这段代码将匹配页面/文章名称以及任何后续数字(支持分页)。但是,它不会匹配在文章名称之后的非字符。有趣的是,即使文章没有指定的页面,它仍然会被接受为合法。


1

是的,这个可能是故意设计的奇怪现象。

http://ww.example.com/mypage/ 200 (预期结果)

http://ww.example.com/mypage/idontexist 404 (预期结果)

但是:

http://ww.example.com/mypage/0000 200 (意外结果)

我认为这可能与WP如何处理存档ID和日期作为永久链接结构/重写的一部分有关。


1

众所周知,WordPress通过内置的重写模块工作。因此,它也会为您提供永久链接功能,您可以通过它设置所有帖子的永久链接。让我们来看看基于WordPress的博客中有关永久链接的详细信息。在这里,我们使用链接http://codex.wordpress.org/Introduction_to_Blogging#Pretty_Permalinks

如果您想重新构建所有URL,则需要编辑此文件。

$permalink_structure 

数据库中的永久链接结构。这是您在永久链接选项页面上设置的内容,包括像 %year%、%month% 和 %post_id% 这样的“标签”。
有关永久链接结构的更多详细信息,请参阅此链接。 http://codex.wordpress.org/Class_Reference/WP_Rewrite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接