我刚刚在我的 VPS 上设置了 Wordpress,到目前为止它是我网站上的唯一项目。出于 SEO 目的,我认为最好将主域重定向到博客文件夹。
假设主域名为example.com
,Wordpress 位于example.com/blog
。我想将www.example.com
和重写example.com
为example.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. 你的重写规则是不正确。无需捕获任何东西,只需传递$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...
}