我试图将第二个品牌的网络应用程序拆分为第一个品牌,并使用301重定向来重定向任何挥之不去的流量。服务器在端口8001上的Vagrant框转发中运行。我希望:
取代 https://local-dev-url:8001/foo/(anything) 301而不是 https://local-dev-url:8001/(anything)
取代 https://local-dev-url:8001/adminfoo/(anything) 301而不是 https://local-dev-url:8001/admin/(anything) 。
以下是我所拥有的:
location ~ /foo/?(.*)$ {
return 301 $1/;
}
location ~ /adminfoo/?(.*)$ {
return 301 admin/$1/;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Authorization $http_authorization;
proxy_set_header X-Scheme $scheme;
proxy_pass http://127.0.0.1:5000;
proxy_redirect http:// $scheme://;
}
location /admin/ {
alias /hostonly/path/to/admin/stuff/;
}
但是,不是将 https://local-dev-url:8001/foo/ 重定向到 https://local-dev-url:8001/ ,而是改为 https://local-dev-url// 。 (没有端口号,额外的斜杠。)我已经看到了对重定向的URL进行硬编码的答案,但由于我与很多其他开发人员合作并且我们都有唯一的本地开发URL,唯一一致的部分是:8001端口号。
有没有办法将301配置为按需工作?
答案 0 :(得分:12)
如果nginx
没有侦听端口8001,则无法知道重定向中使用哪个端口。您需要明确指定它:
location ~ /foo(.*)$ {
return 301 $scheme://$http_host$1;
}
location ~ /adminfoo(.*)$ {
return 301 $scheme://$http_host/admin$1;
}
$http_host
变量由原始请求中的主机名和端口组成。有关详细信息,请参阅this document。
答案 1 :(得分:0)
对我来说,编辑proxy.conf
中的以下几行看起来很简单:
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;