Web应用程序中的大多数事务都是自己保护的,但在浏览器中发生事务时不显示locking图标。 目标是将某些页面(如login页面)进行sslencryption,并在浏览器中显示locking图标。 一个例子是http://www.domain.com/pro应该是https,但如果你去http://www.domain.com它将通过HTTP进来。 我们有一些需要redirect的URI。
我第一次尝试重写:
rewrite ^/pro$ https://www.domain.com/pro
但是,这显然会导致redirect循环,所以我试图包括http部分。
rewrite ^http:*./pro$ https://www.domain.com/pro
这也不起作用,并导致redirect循环。 我唯一的猜测是,在重写的正则expression式不看标题只有URI本身,所以它将开始与WWW而不是http。
我尝试了一些使用位置而不是重写的东西,这就是我卡住的地方。
location /pro { if ( $scheme = http ){ rewrite ^ https://www.domain.com/pro; } }
有了这个在configuration重写发生,但我得到一个从Nginx 404 Not Found页面。 如果我删除它,但键入https://www.domain.com/pro然后加载罚款。 我觉得location语句再次捕获URI,但不知道该怎么做,因为if语句不再是真的。 我只是不知道还有什么要包括在位置块来让它工作。
那么如何才能让某些页面从http连接切换到https连接呢?
HTTPS和正常的HTTP将通过不同的端口进入,所以你想要做的只是将任何你想通过HTTPS服务的普通HTTP请求redirect到HTTPS。 所以如下:
server { listen 80; server_name _; location / { rewrite ^/(pro)$ https://$host/$1; } }
…不应该导致一个redirect循环,因为它只是转发:80,并且它正在转发TO:443(这是默认情况下,HTTPS请求会进入的)。