我有一个Wordpress安装名称的奇怪冲突,我需要写一些Nginx规则来修复它。
我曾经在Wordpress页面/项目中列出我的软件项目,并链接到子页面/ projects / aprojectname , / projects / anothername等。
最近,我购买了一个自定义posttypes的主题组合项目。 它被称为项目 (注意缺less的 )。
在/项目 ,我访问所有项目职位的默认Wordpress列表。 然后,我可以使用/ project / aprojectname , / project / anothername等来访问post
到现在为止还挺好。 问题是我想使用新的/项目结构保留任何以前的链接到我/项目/东西。 此外,我想只保留/项目页面(不redirect)。
这是我想要完成的。
该URL /项目 只应该redirect到/项目 ,以便我可以显示一个WordPress的页面,而不是“丑陋的”Wordpress的职位列表。
因此,URL /项目不应该被处理。 它应该显示相应的Wordpress页面。
但是, / 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指令,因为这是重写的首选方式。