禁止用户在WordPress网站上使用句点替换连字符

Jos*_*ity 5 wordpress permalinks

在审核了Google Analytics和广告流量后,我们意识到人们能够以非常奇怪的方式在客户端网站上查找网页.用句点替换连字符.

例如...

正确永久链接:www.domain.com/this-is-a-link错误:www.domain.com/this.is.a.link

两者都工作并将用户发送到同一页面.但我不确定为什么.我们尝试了各种浏览器,它们似乎在所有浏览器中都是一样的.通常,这对用户有帮助(一般来说),但它会使分析倾斜.

我怀疑广告活动人员创建了与问题开始的时期的链接.但即使修复它,它也没有回答为什么这甚至可行或如何禁止这种行为/功能的问题.

有什么想法吗?

cyl*_*ua2 1

WordPress 使用 mod_rewrite 作为永久链接。mod_rewrite 在 url 中使用模式匹配来区分 .htaccess 文件中要重写和不重写的内容。

.字符实际上是指正则表达式模式匹配中的任何字符,mod_rewrite 用于确定要重写的内容。

为了更好地说明这一点,请举个例子

www.domain.com/this-is-a-link
Run Code Online (Sandbox Code Playgroud)

成为您想要的正确链接,但在以下情况下

www.domain.com/this.is.a.link
Run Code Online (Sandbox Code Playgroud)

它也将匹配.正在读取的内容,-因为单点表示任何字符

您可以阅读有关mod_rewrite 的更多信息,以更好地理解为什么句点也被读取为破折号。

解决这个问题的唯一方法是重写默认的 WordPress 原生 mod_rewrite 模式,或者将其报告为错误,要求核心社区将其列为错误会更合适。但这似乎很常见,即使对于大型网站(例如带有 url 的 eBay)

 http://www.ebay.com/rpp/halloween-events/sweet-treats
Run Code Online (Sandbox Code Playgroud)

网址与

 http://www.ebay.com/rpp/halloween-events/sweet.treats
Run Code Online (Sandbox Code Playgroud)

也是有效的。我相信这是 mod_rewrite 的一个限制,所以你可能想要忍受它。