Nginxredirect所有子文件夹,但文件夹本身

我有一个Wordpress安装名称的奇怪冲突,我需要写一些Nginx规则来修复它。

我曾经在Wordpress页面/项目中列出我的软件项目,并链接到子页面/ projects / aprojectname/ projects / anothername等。

最近,我购买了一个自定义posttypes的主题组合项目。 它被称为项目 (注意缺less )。

/项目 ,我访问所有项目职位的默认Wordpress列表。 然后,我可以使用/ project / aprojectname/ project / anothername等来访问post

到现在为止还挺好。 问题是我想使用新的/项目结构保留任何以前的链接到我/项目/东西。 此外,我想只保留/项目页面(不redirect)。

这是我想要完成的。

  1. 该URL /项目 应该redirect到/项目 ,以便我可以显示一个WordPress的页面,而不是“丑陋的”Wordpress的职位列表。

  2. 因此,URL /项目不应该被处理。 它应该显示相应的Wordpress页面。

  3. 但是, / projects / something中的所有 URL 应该redirect到/ project / something

这是我迄今为止的nginx规则。

location ~ ^/projects/(.*) { return 301 http://$server_name/project/$1; } 

这适用于3:/ projects / aprojectname – > / project / aprojectname。

它不适用于2,因为它重写/项目/项目

我不知道如何实施1.,因为任何尝试都会影响到以前的书面规定。

 location ~ ^/projects/(.+) { rewrite ^ http://$server_name/project/$1 permanent; } 

。+代替。*解决了问题,因为。+匹配1个或多个字符,而。*匹配0个或多个字符。 因此/ projects /文件夹没有被规则触及。

1,以下应该工作:

 location = /project { rewrite ^ http://$server_name/projects permanent; } 

location =是nginx的精确匹配指令,所以只有当URI完全是/project时才匹配。

我还用rewrite -directivereplace了return 301指令,因为这是重写的首选方式。

  • 泰罗