我正在尝试设置我的 nginx 服务器来执行以下操作:
将 www 重定向到非 www
当浏览器地址栏显示时,从 en 文件夹提供 foo.htm 文件https://domain.com/en/foo对于以下所有 URL:
http://domain.com/en/foo
https://domain.com/en/foo
http://domain.com/en/foo/
https://domain.com/en/foo/
http://domain.com/en/foo.htm
https://domain.com/en/foo.htm
http://domain.com/en/foo.html
https://domain.com/en/foo.html
http://domain.com/en/foo.[any extension]
https://domain.com/en/foo.[any extension]
将根域重定向到子文件夹:
https://domain.com/
->https://domain.com/de
到目前为止,我设法完成了 1. 和 2 的某些部分。每当我尝试设置 3. 时,我都会得到一个重定向循环
我的配置文件如下所示:
http {
server {
listen 80;
server_name www.domain.com;
return 301 $scheme://domain.com$request_uri;
}
server {
listen 80;
server_name domain.com;
location / {
root /srv/www/domain.com/;
index index.html index.htm;
try_files $uri.htm $uri/ =404;
# the following line causes redirect loop:
rewrite ^ example.com/de permanent;
}
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
我究竟做错了什么?
答案1
这会导致重定向循环,因为即使 URL 是http://example.com/de
rewrite ^ example.com/de permanent;
如果你只是想重定向http://example.com到子文件夹,您可以按照@sendmoreinfo 方式:
创建一个单独的位置 = / 并在那里执行(3)。
如果你想将所有内容重定向到/de:
if ($request_uri !~ /de/) {
rewrite ^ http://example.com/de permanent;
}
希望这有帮助。