【问题标题】:Stripping "blog" from wordpress URLs with Regex使用正则表达式从 wordpress URL 中删除“博客”
【发布时间】:2014-06-12 11:34:49
【问题描述】:

我已经设法让自己完全陷入了正则表达式的世界,并且可以伸出援手。

我最近将我的 wordpress 安装从 /blog 子域移动到了整个站点,因此我需要从所有传入的 url 中删除 /blog/,但完全匹配除外,因为 /blog 仍然是博客。

例如我需要:

http://foo.com/blog/bar
http://foo.com/blog/foobar/bar
foo.com/blog/bar

全部丢失 /blog/ 但我需要

http://foo.com/blog
foo.com/blog

保留他们的。

我正在使用 wordpress 重定向插件来管理它,因为它会跟踪 404 错误,这让我陷入了困境。

谁能帮忙!?

【问题讨论】:

  • '/' 替换'/blog/' 应该可以解决问题。你甚至不需要正则表达式。

标签: regex wordpress


【解决方案1】:

您需要将\/blog\/(.+) 替换为/$1

仅将/blog/ 替换为/ 也会替换http://foo.com/blog/

更新:

除了我以前的帖子结构之外,这非常有效 是/y/m/d/postname。当它存在时,我将如何剥离它 但不影响另一个重定向?

在这种情况下,您可以使用\/blog\/(\d{4}\/\d{2}\/\d{2}\/(.+))

结果:

url: http://foo.com/blog/2014/03/09/bar
$1: 2014/03/09/bar
$2: bar

更新 2:

如果您想同时剥离两种方式,请使用 \/blog\/(?:\d{4}\/\d{2}\/\d{2}\/)?(.+)

结果:

url: http://foo.com/blog/bar
url: http://foo.com/blog/2014/03/09/bar
$1: bar

url: http://foo.com/blog/tag/sometag
$1: tag/sometag

【讨论】:

  • 除了我之前的帖子结构是 /y/m/d/postname 之外,它非常有效。当它存在但不影响另一个重定向时,我将如何剥离它?
  • 嗯……那是在删除博客而不是帖子中的 /2012/10/01/ 并且没有删除任何 blog/tag/2012。编辑:过早推回。这张图片显示了我的设置。这是错的吗? dl.dropboxusercontent.com/u/25250818/…
  • @user3733863 这就是我添加$2 的原因。如果你想把它全部剥离,你可以使用/$2 作为目标。较新的模式仅匹配日期模式。您可以通过在() 之后添加? 来使其成为可选。
【解决方案2】:

为什么不试试简单的 replace()?除非我误解了这个问题,否则显示的输出与您需要的不一样吗?

    public static void main(String[] args) {
    String s = "http://foo.com/blog/bar";
    String s1 = "http://foo.com/blog";
    System.out.println(s.replace("/blog/", "/"));
    System.out.println(s1.replace("/blog/", "/"));
}

O/P:

http://foo.com/bar
http://foo.com/blog

【讨论】:

  • 它需要作为 301 重定向工作吗?不要认为你可以在 htaccess 文件中使用它。
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 2020-07-12
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
相关资源
最近更新 更多