我在安装 Wordpress 时遇到了奇怪的名称冲突,我需要编写一些 Nginx 规则来修复它。
我曾经在 Wordpress 页面中列出我的软件项目/项目,包含子页面链接/项目/项目名称,/项目/其他名称, ETC。
最近,我购买了一个带有自定义帖子类型的主题,用于组合项目。它叫做项目(请注意缺失s)。
在/项目,我访问了所有默认的Wordpress列表项目帖子。然后,我可以使用/项目/项目名称,/项目/其他名称, ETC。
到目前为止一切顺利。问题是我想使用新的 /project 结构来保留任何先前指向我的 /projects/something 的链接。此外,我只想保留 /projects 页面(不重定向)。
这就是我想要实现的。
URL/项目 仅有的应该重定向到/项目,这样我就可以显示一个 Wordpress 页面,而不是“丑陋的”Wordpress 帖子列表。
因此,URL/项目 仅有的不应进行处理。它应该显示相应的 Wordpress 页面。
然而,全部表单中的 URL/项目/某事应该重定向到/项目/某事
这是我目前的 nginx 规则。
location ~ ^/projects/(.*) {
return 301 http://$server_name/project/$1;
}
这对 3. 很有效:/projects/aprojectname -> /project/aprojectname。
它不适用于 2.,因为它将 /projects 重写为/项目
我不知道如何实施1.,因为任何尝试都会影响之前写的规则。
答案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 指令替换了 return 301 指令,因为这是执行重写的首选方式。
- 泰罗