【问题标题】:Why rewrite directive causes "301 Moved Permanently" with Nginx?为什么重写指令会导致 Nginx 出现“301 永久移动”?
【发布时间】:2012-11-23 20:27:43
【问题描述】:

下面是我在 Nginx 1.2.5 运行的服务器的配置文件中的一个非常简化的版本,但它在提供数据之前会导致 301 Moved PermanentlyLocation: http://example.com/phpmyadmin/,这不是我对默认值的期望rewrite 指令的行为。

server {
    listen 80;
    location /pma {
        rewrite ^ /phpmyadmin;
    }
    location /phpmyadmin {
        root /var/www;
        index Documentation.html;
    }
}

当我在浏览器中转到 http://example.com/pma 时,数据已提供,但地址栏中的 URL 更改为 http://example.com/phpmyadmin/,而它本应保持为 http://example.com/pma

如何避免 Nginx 发送 301 Moved Permanently 使其不会暴露我服务器上的实际目录结构?

【问题讨论】:

    标签: redirect nginx webserver rewrite security


    【解决方案1】:

    试试别名:

    server {
        listen 80;
        location /pma {
            alias /phpmyadmin;
        }
        location /phpmyadmin {
            root /var/www;
            index Documentation.html;
    }
    

    【讨论】:

    • 但我想要一个重定向,只需要一个不需要 301 的 internal 重定向以及有关所服务数据的真实位置的信息。再一次,该示例被高度简化和重写,配置在其原始形式中非常有意义。问题更多是关于为什么rewrite 会导致301。这没有记录,至少在重写模块的官方页面上没有。
    • 试过了。一样。 Nginx 发送一个301 并且URL 在浏览器中更改为http://example.com/phpmyadmin/,而它应该保持http://example.com/pma
    • 您是否删除了重写以支持别名?
    • 当我需要重写以特定方式更改 URI 时,为什么要删除它?
    • 在这种情况下,别名是重写给定您想要的结果的替代品。
    【解决方案2】:

    我认为您需要使用别名而不是重写。 Rewrite 创建一个“新”URL,因此它会进行重定向

    server {
        listen 80;
        location /pma {
            alias  /var/www/phpmyadmin;
            index Documentation.html;
        }
        location /phpmyadmin {
            root /var/www;
            index Documentation.html;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 2019-11-04
      • 2012-07-10
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多