为什么重写指令会导致“301永久移动”与Nginx?

时间:2012-12-05 21:38:43

标签: redirect nginx webserver rewrite security

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

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

当我在浏览器中转到http://example.com/pma时,会提供数据,但地址栏中的网址会更改为http://example.com/phpmyadmin/,而该网址应该保留http://example.com/pma

如何避免Nginx发送301 Moved Permanently以便它不会在我的服务器上公开实际的目录结构?

2 个答案:

答案 0 :(得分:0)

尝试别名:

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

答案 1 :(得分:0)

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

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