【问题标题】:Regex to append a variable to URLs正则表达式将变量附加到 URL
【发布时间】:2017-10-12 23:25:03
【问题描述】:

我现在在一个使用重定向插件的 WordPress 网站上有一个正则表达式:

来源网址: ^/video/(.+)

目标网址: /video/$1

而且效果很好。现在,我需要将?filter=views 添加到目标 URL 的末尾,但我似乎找不到方法。

所需的重定向是:

site.com/video/video-category-name 到 site.com/video/video-category-name?filter=views

添加 /video/$1?filter=views 作为目标 URL 会添加多个 ?filter=views,而我只需要添加一次变量。

有谁能帮帮我吗?谢谢!

【问题讨论】:

  • 目标 URL = /video/$1?filter=views 不起作用?
  • @stej4n 我的错,我添加的描述确实有效。但是,除此之外,我要做的是将/video/whatever-keywords 重定向到/video/whatever-keywords?filter=views,这不起作用(它在URL 之后添加了多个?filter=views,我只需要一个)。我用这个更新了原来的问题。

标签: php regex wordpress


【解决方案1】:

您应该使用

排除多个重定向

来源网址:^/video/([^?]+)

目标网址:/video/$1?filter=views

说明

如果源 URL 是 ^/video/(.+),那么 (.+) 将匹配 /video/ 之后的任何内容,包括第一次重定向之后:

/test 匹配 .+ => 重定向到 /video/test?filter=views

/test?filter=views 匹配 .+ => 重定向到 /video/test?filter=views?filter=views

...等等

如果您在/video/ 之后允许除? 之外的任何字符,则重定向将立即停止,因为/video/$1?filter=views 将不再匹配源URL

【讨论】:

  • 由于某种原因,在我点击保存后,插件会删除源 URL 中 ? 之后的所有内容。
  • 顺便说一下,其他过滤器 URL 应该可以工作(?filter=rating, ?filter=new)。我需要的是,当您访问没有过滤器的 URL 时,它会默认添加 ?filter=views。
  • 我添加了([^?]+)(根据您最近的编辑没有#,它仍在向URL添加多个变量)
  • 如果插件在? 之后删除所有内容,那么这是合乎逻辑的,它会一次又一次地重定向。你用的是哪个插件?也许它可以选择保留 URL args ?
  • 似乎 Wordpress 重定向插件不处理查询参数。您应该改用 .htaccess 和 [QSA] 标志。 stackoverflow.com/questions/12551382/…
猜你喜欢
  • 2020-10-22
  • 1970-01-01
  • 2022-09-27
  • 2012-05-23
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多