Nginx:将子文件夹重写到根目录并保持旧的 WordPress 链接有效

Nginx:将子文件夹重写到根目录并保持旧的 WordPress 链接有效

我正在努力解决 NginX 重写和重定向问题,但只成功了一半。希望能得到一些帮助。

情况:

客户有 4 个域名,他们想将它们全部指向同一个 Wordpress 安装。好的,我找到了不错的 WP 插件(多域名)来实现这一点。

以前的 WP 安装在 /wp/ 文件夹中,我必须将其移动到根目录才能使多域插件正常工作。

因此我必须添加 NginX 选项来处理以前的 /wp/ 子文件夹,原因有二:

  • SEO 和 Google 索引仍然指向 /wp/ URL,如果没有下面的重写,这些 URL 将会失效
  • 网站设计师对一些图片链接和其他一些内容进行了硬编码,并在 URL 中包含了 /wp/,因此下面的重写也解决了这个问题

现在 belwo 全部可以工作了,最好的部分是,该 URL 保留了输入时的域名(不会重定向到主域名):

域名A.com

domainB.com/?cat=7 --> domainB.com/news

domainC.com/wp/something --> domainC.com/something

location ^~ /wp/(.+) { rewrite ^/wp/(.+)$ $1 last; }

有问题吗?是的,一切正常,除了在不带参数的情况下调用 /wp/ 时:

domainA.com/wp --> 404

domainB.com/wp --> 404

...

我也尝试过(.*),但是没用。有想法吗?

编辑 按照现在的配置,所有 4 个域名都可以正常工作,并且 /wp/ 位于 URL 字符串的中间,如下所示:

domain.com/wp/news--> domain.com/news(太棒了!)

唯一的问题仍然存在,当 /wp 位于末尾时:

domain.com/wp--> domain.com/wp(不重写/重定向,这不行)


编辑更清晰的问题

我可以简单地请求 NginX 重写规则,它将包括所有这些位置:

domain.com/可湿性粉剂/something
domain.com/可湿性粉剂/wp-config
domain.com/可湿性粉剂/?cat=7
域名.com/可湿性粉剂/
域名.com/可湿性粉剂

...但不包括 wp* 文件:

domain.com/wp-config

这有效,但不涵盖 /wp 和 /wp/ 单独,没有参数:

location ^~ /wp/(.+) {
 rewrite ^/wp/(.+)$ $1 last;
}

答案1

您的正则表达式要求后面的斜杠/wp必须存在才能匹配,但是您说您不想要这样。

location ^~ /wp/(.+) {
     rewrite ^/wp/(.+)$ $1 last;
}

因此只需将尾部斜杠设为可选即可。实际上,您并不需要location;您可以将它rewrite直接放在相应的块中server

rewrite ^/wp(/.+)? $1 last;

相关内容