![Nginx:将子文件夹重写到根目录并保持旧的 WordPress 链接有效](https://linux22.com/image/727741/Nginx%EF%BC%9A%E5%B0%86%E5%AD%90%E6%96%87%E4%BB%B6%E5%A4%B9%E9%87%8D%E5%86%99%E5%88%B0%E6%A0%B9%E7%9B%AE%E5%BD%95%E5%B9%B6%E4%BF%9D%E6%8C%81%E6%97%A7%E7%9A%84%20WordPress%20%E9%93%BE%E6%8E%A5%E6%9C%89%E6%95%88.png)
我正在努力解决 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;