Nginx wordpress将模式重写为特定页面

时间:2017-07-07 23:31:55

标签: wordpress nginx

我试图对其进行设置,以便某些网址会重写(不会将地址栏中的网址更改)到具有识别参数的特定网页。

我想

site.com/reviews/froot_loops_review.php AND
site.com/reviews/froot_loops_review

实际显示

site.com/review?title=froot_loops

此外,我希望能够附加任何其他参数:

site.com/reviews/froot_loops_review.php?var=1

将显示以下内容:

site.com/review?title=froot_loops&var=1

我很难用这个,因为这是我第一次编辑nginx配置文件,这是我已经得到但它不起作用(我想是因为它没有进行第一场比赛):

  location /reviews/ {
    rewrite ^/reviews/(.*)_review.php(.*) /review?title=$1 break;
    return  403;
  }

我在这里做错了什么?我的下一步应该是什么?学习Nginx重写的好资源是什么?

1 个答案:

答案 0 :(得分:0)

我不确定这是否是严格的答案。但是您当前的解决方案存在多个问题。

这是一个WordPress网站,因此已经存在location ~ \.php$块,它处理以.php结尾的任何URI。 URI /reviews/froot_loops_review.php永远不会进入您问题中的location /reviews/块。

您可以使用^~指令上的location修饰符强制nginx忽略任何匹配的正则表达式位置块。有关详细信息,请参阅this document

重写的URI无法在同一个location块中处理,因此break是使用的错误后缀。使用last您将获得更多成功。有关详细信息,请参阅this document

但主要问题是WordPress本身。 WordPress通常使用REQUEST_URI(最初呈现的URI)来标识所请求的页面。这就是为什么我们可以将所有内容重写为/index.php并仍然得到正确的页面。

尝试让WordPress使用您重写的URI而不需要外部重定向(您说您不想这样做)很棘手。你可能最好寻找一个WordPress插件来实现它 - 或者试着让这些漂亮的永久链接以你想要的方式工作。