我正在制作我的第一个Nginx配置文件。我有2个目标:
即:
mysite.com >>>“ www.mysite.com”
和
123.456.789.123/BETA >>>“ www.mysite.com”
这是我的配置:
server {
listen 80;
listen 443 ssl;
server_name 123.456.789.123;
return 301 $scheme://www.mysite.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name mysite.com;
rewrite ^(.*)$ $scheme://www.mysite.com$1;
location ~* ^/BETA/ {
return 301 /;
}
}
mysite.com >>>“ www.mysite.com”有效但 123.456.789.123/BETA >>>“ www.mysite.com”改为给出:“ www.mysite.com/BETA”
感觉我在这里做错了...应该有2个“服务器”块吗?如果是这样,我应该如何构造它以使用一个? “位置”是将子目录重写为根目录的正确方法吗?可能会导致与同一服务器块中的重写产生一些冲突?是否应该创建第3个服务器块以将子目录重写为根目录?有没有一种方法可以直接将123.456.789.123/BETA重写为www.mysite.com?
谢谢您的帮助!
答案 0 :(得分:0)
摘自文档:https://www.nginx.com/blog/creating-nginx-rewrite-rules/
应该这样做,我修改了您的代码以将123.456.789.123/BETA重定向到www.mysite.com(只需删除$ request_uri以将请求发送到123.456.789.123/BETA)。对于123.456.789.123请求的其他任何页面,例如123.456.789.123/foo,都将重定向到www.mysite.com/foo。
server {
listen 80;
listen 443 ssl;
server_name 123.456.789.123;
location = /BETA {
return 301 $scheme://www.mysite.com;
}
return 301 $scheme://www.mysite.com$request_uri;
}
server {
listen 80;
listen 443 ssl;
server_name mysite.com;
rewrite ^(.*)$ $scheme://www.mysite.com$1;
}
如果您还希望将/ BETA的子页面(例如/ BETA / foo)重定向到www.mysite.com,请在/ BETA之前删除该行中的'='。
编辑:不确定是否很清楚,但是您将需要一个具有server_name www.mysite.com的服务器块来实际为您的网站服务。