【问题标题】:Nginx redirect for http and https用于 http 和 https 的 Nginx 重定向
【发布时间】:2018-04-24 04:11:45
【问题描述】:

我正在尝试对传入连接强制使用 HTTPS,同时还将所有请求重定向到某个 url。

想要的结果:

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;
   }

非常感谢任何帮助!

【问题讨论】:

    标签: redirect nginx url-rewriting


    【解决方案1】:

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

    【讨论】:

    • 那么我将如何将重定向写入 /dir 部分?我会放弃 https 吗?
    • 这样的东西应该可以工作 - rewrite ^((?!dir/)\S+)$ dir/$1 permanent;。虽然没有测试过,但不太确定正则表达式
    【解决方案2】:

    你可以试试这个,

    server {
        listen 80;
        listen 443;
        server_name example.com;
    
        location / {
          return 301 https://example.com/dir$request_uri; 
        }
    
        location /dir {
          ...
          ...
        }
    
    }
    

    基本上这个想法是将两个listen指令保持在同一个服务器块中。上面的代码只是摘录,缺少的部分需要补上。可以参考this链接的return指令部分了解更多详情

    编辑:使用位置块更新代码。

    【讨论】:

    • 不幸的是得到了相同的结果。返回的 URL 如下所示:example.com/dir/dir/dir/dir/dir/....and 等等。不确定这是否是您所说的“无限调用同一块”的意思,但我确实从最后开始填写。
    • 我已经用位置块更新了代码。你现在可以试一试吗?您需要处理 /dir 位置指令。
    • 就是这样!非常感谢,现在 URL 看起来是正确的。感谢您的帮助!
    • @AdamIrinaga 如果您认为它有效,如果您能将其标记为正确答案,我们将不胜感激:)
    猜你喜欢
    • 2014-05-08
    • 2015-07-16
    • 2011-03-29
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多