![Nginx - 将所有先前子域的子目录重定向到主域的子目录](https://linux22.com/image/690340/Nginx%20-%20%E5%B0%86%E6%89%80%E6%9C%89%E5%85%88%E5%89%8D%E5%AD%90%E5%9F%9F%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E4%B8%BB%E5%9F%9F%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95.png)
在 Nginx 中,我希望将我的blog.example.com
子域重定向到主网站 ( example.com/blog
) 的子目录。blog.example.com 子域下有许多博客文章。许多链接都指向这个旧 URL,我想为所有blog.example.com/*
链接(该先前子域的所有子目录链接)设置一个万能重定向,现在转到该重定向example.com/*
(每个帖子都应位于 example.com 域的根目录中 - 而不是/blog
单个帖子的子目录中)。
我目前已将子域名重定向至example.com
使用:
server {
server_name blog.example.com;
location / {
return 301 https://example.com/blog;
}
有人能提供一些关于为前一个子域名的所有子目录设置 301 的提示吗?(仅供参考:example.com 上已存在同名的所有页面)。
答案1
如果我理解正确的话,旧网站上有两种类型的 URI,一种带有嵌入/
(即子目录),一种不带有嵌入(单个帖子)。
类似这样的方法可能会有效:
location / {
return 301 https://example.com/blog$request_uri;
}
location ~ ./ {
return 301 https://example.com$request_uri;
}
第二个位置块使用正则表达式来匹配/
第二个或后续位置上带有 的任何 URI。
答案2
您可以使用它进行重定向:
server {
server_name blog.example.com;
return 301 https://example.com$request_uri;
}
这会重写每个 URL ,https://blog.example.com/blog-post
例如https://example.com/blog_post
。