我试图对其进行设置,以便某些网址会重写(不会将地址栏中的网址更改)到具有识别参数的特定网页。
我想
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重写的好资源是什么?
答案 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插件来实现它 - 或者试着让这些漂亮的永久链接以你想要的方式工作。