【问题标题】:nginx trailing slash issuesnginx尾随斜杠问题
【发布时间】:2011-02-11 16:46:02
【问题描述】:

我在谷歌上搜索了很多,找到了几个解决方法,但你必须定义每个目录。

  • 在 Apache 上:example.com/hi -> example.com/hi/
  • 在 nginx 上:example.com/hi -> Firefox 无法与位于 example.com:8888 的服务器建立连接

其中 8888 是 Apache 正在监听的(nginx 的 :80 -> localhost:8888)

任何想法如何解决这个问题并让它像文件夹一样正常转发?

【问题讨论】:

    标签: configuration nginx


    【解决方案1】:

    我在 varnish 和 nginx 上遇到了类似的问题(端口 80 上的 varnish 代理到 nginx 在 8080 上侦听)并且需要添加“port_in_redirect off;” ... server_name_in_redirect 需要保持打开状态,以便 nginx 知道它正在处理哪个主机。

    【讨论】:

      【解决方案2】:

      以下应该可以解决问题,但需要更多的思考/工作,因为一次只会使用一个位置块:

      location ~ ^(.*[^/])$ {
        if (-d $document_root/$1) {
          rewrite ^(.*)$ $1/ permanent;
        }
      }
      

      (未测试)

      【讨论】:

        【解决方案3】:

        您可以在服务器部分设置“server_name_in_redirect off”

        server{
          listen 80 default;
          server_name localhost;
          server_name_in_redirect off;
        
         ...
         ...
        }
        

        这样就可以了 ;-)

        HTH。

        编辑:只是格式化。

        【讨论】:

        • 这为我解决了重定向问题。 +1!
        【解决方案4】:

        这是最适合我的魔法:

        try_files $uri $uri/ @redirect;
        location @redirect {
            if ($uri !~ '/$') {
                return 301 $uri/$is_args$args;
            }
        }
        

        这里的“if”语句是安全的:http://wiki.nginx.org/IfIsEvil

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-14
          • 2020-05-20
          • 2019-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-30
          相关资源
          最近更新 更多