2017-11-10 161 views
0

我试图强制HTTPS传入连接,同时也重定向到一个特定的URL的所有请求。Nginx重定向为http和https

期望的结果:

http://example.com - >https://example.com/dir

https://example.com - >https://example.com/dir

这里是什么,我相信应该工作,但说有太多的重定向。

server { 
    listen  80; 
    listen  443 ssl; 
    server_name example.com; 

    location/{ 
    return   301 https://$server_name/dir$request_uri; 
    } 

    location /dir { 
     try_files $uri $uri/ /index.php?$args; 
    } 

任何帮助非常感谢!

回答

0

服务器在监听到443端口不应该重定向到本身(返回301 https://..。)

+0

如何将重定向写入/ dir部分呢?我会放弃https吗? –

+0

像这样的东西应该可以工作 - 重写^((?!dir /)\ S +)$ dir/$ 1 permanent;'。不太确定正则表达式,虽然没有测试过 – avpav

0

你可以试试这个,

server { 
    listen 80; 
    listen 443; 
    server_name example.com; 

    location/{ 
     return 301 https://example.com/dir$request_uri; 
    } 

    location /dir { 
     ... 
     ... 
    } 

} 

基本思路是保持在两听指令相同的服务器块。上面的代码只是一个摘录,你需要填写缺少pieces.You可以参考this链接返回指令部分更多细节

编辑:更新与位置块的代码。

+0

不幸的是获得了相同的结果。返回的URL如下所示:https://example.com/dir/dir/dir/dir/dir/ ......等等。不知道这是否意味着'对同一块的无限调用',但我从我的结尾填入了部分内容。 –

+0

我用位置块更新了代码。你现在可以试一试吗?您需要处理/ dir位置指令。 –

+0

就是这样!非常感谢,网址现在看起来正确。感谢帮助! –