2017-07-07 45 views
1

我想设置它,以便某些URL将重写(不更改地址栏中的URL)到具有标识参数的特定页面。Nginx wordpress重写模式到一个特定的页面

我想

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 conf文件,这是我得到的,但它不起作用(我认为,因为它不会进行第一次匹配) :

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

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

回答

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插件来实现它 - 或者试着让漂亮的固定链接以你想要的方式工作。

相关问题