【问题标题】:Nginx rewrite a folder with excludeNginx 用排除重写文件夹
【发布时间】:2013-03-29 13:17:55
【问题描述】:

我正在开发 nginx 网络服务器。

我想重定向文件夹 1 www.site.com/folder1/ 中的所有网址,但不重定向子文件夹 1 www.site.com/folder1/subfolder1

我为 nginx 配置创建了这些规则,但没有运气。

位置 = /文件夹/子文件夹 {

}

位置/文件夹{

重写 ^/folder(.*) www.redirect.com 永久;

}

我错过了什么吗?

【问题讨论】:

    标签: nginx rewrite


    【解决方案1】:

    好的,这是一个精致的答案,包括我读过的一些 cmets 以及我的一个,
    为了能够访问子文件夹中的资产,我添加了 try_files301 重定向为重定向添加了所有其他 url。

    location /folder/subfolder {
        try_files $uri $uri/ =404;
    }
    
    location /folder {
        return 301 $scheme://example.com;
    }
    

    【讨论】:

      【解决方案2】:

      您的新规则集应如下所示。我假设有效的文件命中是可以的(即用户知道文件)。如果您不想要这种行为,请将 try_files 替换为 @rw 块的内容:

      location /folder {
          try_files $uri $uri/ @rw;
      }
      location @rw {
          rewrite ^/folder/([^\/]*) http://www.redirect.com/ permanent;
      }
      

      这些应该可以工作。

      【讨论】:

      • 请给我更具体的例子。我希望将 www.test.gr/folder/ 中的所有网址重定向到另一个静态网址(例如主页),但网址 www.test.gr/folder/subfolderx 继续工作而无需重定向。
      【解决方案3】:

      删除“=”,因为那是“精确”匹配。所以它只匹配文件夹本身,并且对“/folder/subfolder/a_file.html”的请求不会匹配该块。您还需要在重写规则中添加 $scheme。如果你只是想重定向到主页(http://www.redirect.com),你可以去掉“$1”部分。

      location /folder/subfolder {
      
      }
      
      location /folder {
      
        rewrite ^/folder(.*)$ $scheme://www.redirect.com$1 permanent;
      
      }
      

      【讨论】:

      • 使用此解决方案,排除文件夹规则不起作用。它给了我 404 未找到
      • 您是否在“/文件夹/子文件夹”下提供静态文件?您需要在其中放置一个“root”指令来告诉 nginx 在哪里可以找到该文件。见wiki.nginx.org/HttpCoreModule#root。如果您添加有关文件位置的更多信息,我可以告诉您如何操作。
      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2011-09-30
      • 2013-08-20
      • 2020-04-07
      • 2018-07-31
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多