如何使用Nginx将单个URI从httpredirect到https?

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请求会进入的)。