nginx 301 重定向到主域上的子文件夹

nginx 301 重定向到主域上的子文件夹

我刚刚在我的 VPS 上设置了 Wordpress,到目前为止它是我网站上的唯一项目。出于 SEO 目的,我认为最好将主域重定向到博客文件夹。

假设主域名为example.com,Wordpress 位于example.com/blog。我想将www.example.com和重写example.comexample.com/blog

我通过 Google 搜索到了一些脚本,并对我的 nginx 配置文件做了一些更改。我的配置如下:

#301 redirect www to non-www
server {
server_name  www.example.com;
location = / {
rewrite ^/(.*) http://example.com/$1 permanent;
}
}

#301 non-www to subfolder
server {
server_name  example.com;
location = / {
rewrite ^/(.*)  http://example.com/blog$1 permanent;
}
}

它在某种程度上起作用了,它成功重定向到example.com/blog。唯一的问题是我收到 404 未找到错误。当我仅将 nginx 重定向www到时example.com/blog,我可以成功访问博客页面。

我知道非 www 到子文件夹脚本有问题,但不知道如何修复。有什么建议吗?

答案1

尝试这个:

#301 redirect www to non-www
server {
    server_name  www.example.com;
    # redirect all requests
    rewrite ^(.*) http://example.com$1 permanent;
}
server {
    server_name  example.com;
    # this only matches /, and not any other requested file
    location = / {
        rewrite ^ http://example.com/blog/ permanent;
    }

    # rest of configuration goes here...
}

答案2

您的问题两部分

  1. 获取服务器名称的重写。

  2. 获取所述目录的重写。

按照 1. 你的重写规则是不正确。无需捕获任何东西,只需传递$request_uri包含请求的变量,就像客户端将其发送给 Nginx 一样。


server {
    server_name  www.example.com;
    # redirect all requests
    rewrite ^ http://example.com$request_uri? permanent;
}

对于第二部分,使用更简单的重写,如下所示:


server {
    server_name  example.com;
    # this only matches /, and not any other requested file
    location = / {
        rewrite ^.+ /blog permanent;
    }

# rest of configuration goes here...

}

相关内容