Ade*_*Ade 6 redirect nginx http-status-code-301
这看起来很荒谬但我在一个多小时的搜索中找不到合适的答案.
我有一个静态网站运行nginx(恰好在Varnish后面).调用索引文件index.html
.我想将实际访问该URL的任何人重定向mydomain.com/index.html
到mydomain.com
.
这是我的网站的nginx配置:
server {
listen 8080;
server_name www.mydomain.com;
port_in_redirect off;
location / {
root /usr/share/nginx/www.mydomain.com/public;
index index.html;
}
rewrite /index.html http://www.mydomain.com/ permanent;
}
Run Code Online (Sandbox Code Playgroud)
http://www.mydomain.com/index.html
按照预期的方式响应一个301
位置,http://www.mydomain.com/
但不幸的是http://www.mydomain.com/
也回复301自身,所以我们得到一个重定向循环.
如果index.html确实在请求中,我怎么能告诉nginx只提供301?
添加新的位置块以处理您的主页,并使用try_files指令(而不是"index index.html;")直接查找index.html文件.请注意,try_files要求您输入至少2个选项.所以我把同一个文件放两次.
location = / {
root /usr/share/nginx/www.mydomain.com/public;
try_files /index.html /index.html;
}
Run Code Online (Sandbox Code Playgroud)
根据我的实验看起来不错:
curl -iL http://www.mydomain.com/index.html
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Sat, 16 Mar 2013 09:07:27 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: http://www.mydomain.com/
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 16 Mar 2013 09:07:27 GMT
Content-Type: text/html
Content-Length: 4
Last-Modified: Sat, 16 Mar 2013 08:05:47 GMT
Connection: keep-alive
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)
[ UPDATE ]重定向循环的根本原因是'index'指令,它触发nginx再次进行另一轮位置匹配.这就是位置块外部的重写规则再次执行的原因,从而导致循环.所以'index'指令就像是"重写......最后"; 指示.在你的情况下,你不希望这样.
诀窍是不再触发另一个位置匹配.try_files可以有效地做到这一点.这就是我在原来的答案中选择它的原因.但是,如果您愿意,另一个简单的解决方法是替换
index index.html;
Run Code Online (Sandbox Code Playgroud)
通过
rewrite ^/$ /index.html break;
Run Code Online (Sandbox Code Playgroud)
在您原来的"位置/"区块内.这'重写......休息;' 指令将使nginx保持在同一位置块内,有效地停止循环.但是,这种方法的副作用是你失去了'index'指令提供的功能.
[ 更新2 ]
实际上,index指令在重写指令之后执行.所以以下也有效.请注意,我刚刚添加了重写... break; 线.如果请求uri是"/",则nginx首先从重写规则中找到现有文件/index.html.因此,永远不会为此请求触发index指令.因此,两个指令可以一起工作.
location / {
root /usr/share/nginx/www.mydomain.com/public;
index index.html;
rewrite ^/$ /index.html break;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18351 次 |
最近记录: |