【问题标题】:URL rewrite regex conversionURL重写正则表达式转换
【发布时间】:2016-08-20 04:59:25
【问题描述】:

我在尝试学习如何将此 URL 写入正则表达式模板以作为重写添加时遇到了麻烦。我已经尝试了各种正则表达式沙箱来自己解决这个问题,但它们不允许使用“/”,例如当我从这里复制一个表达式进行测试时:

我有一个自定义帖子类型(出版物),其中包含 2 个分类法(杂志、问题),我正在尝试为其创建一个好看的 URL。

几个小时后,我来到这里了解如何转换它。

index.php?post_type=publications&magazine=test-mag&issue=2016-aug

到可以输出的模板化正则表达式(publicationmagazineissue都是常量)。

http://example.com/publications/test-mag/2016-aug/

如果一篇文章从该页面被跟进,希望有扩展空间。

提前致谢。

编辑 1:

我的规则是这样的:

^publications/([^/]*)/([^/]*)/?$

这是我的比赛:

^index.php?post_type=publications&magazine=$matches[1]&issue=$matches[2]$

并以此进行测试:

http://localhost/publications/test-mag/2016-aug/

但它给了我一个 404。有什么问题?

【问题讨论】:

  • 您将使用哪个 URL 重写引擎?
  • @10100111001 Wordpress 重写

标签: regex wordpress url-rewriting


【解决方案1】:

^index\.php\?post_type=publications&magazine=([^&]+)&issue=([^&]+)$

  • ^ 字符串开头
  • index\.php\?post_type=publications&magazine=文字文字
  • ([^&]+) 一个或多个非 & 字符(将获取所有文本直到下一个 url 参数。这被捕获为一个组
  • &issue=文字文字
  • ([^&]+) 一个或多个非 & 字符。也被捕获
  • $ 字符串结束

【讨论】:

  • 非常感谢,这些 ([^&]+) 也可以作为比赛的一种变量吗?
  • 他们没有。他们只是这样做,以便您在代码中单独获取这些字符串。
  • 我如何在重写中回调那些字符串?抱歉,我对正则表达式完全陌生
  • 看起来@1252748 已经涵盖了这一点。我擅长正则表达式,但对 wordpress 不太熟悉。
【解决方案2】:
$str = 'index.php?post_type=publications&magazine=test-mag&issue=2016-aug';
preg_match('/magazine=([\w-]+?)&issue=([\w-]+)/', $str, $matches);
$res = 'http://example.com/' . $matches[1] . '/' . $matches[2] . '/';
echo $res;  // => http://example.com/test-mag/2016-aug/

【讨论】:

    【解决方案3】:

    您可以使用 WP Rewrite API 中的 add_rewrite_rule 方法来完成此操作。

    add_rewrite_rule('^/([^/]*)/([^/]*)/?$','index.php?post_type=publications&magazine=$matches[1]&issue=$matches[2]','top');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多