2012-12-05 50 views
0

下面是我在Nginx 1.2.5運行的服務器的配置文件中的一個簡化版本,但是在服務數據之前它會導致301 Moved PermanentlyLocation: http://example.com/phpmyadmin/,這不是我期望從rewrite指令的默認行爲。爲什麼使用Nginx重寫指令導致「301永久移動」?

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

當我去http://example.com/pma在瀏覽器中,數據服務,但在地址欄變爲http://example.com/phpmyadmin/的URL,而它應該留http://example.com/pma

如何避免Nginx的發送301 Moved Permanently,這樣它不公開我的服務器上的實際目錄結構?

回答

-1

嘗試別名:

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

但我想一個重定向,只有__internal__重定向不需要301要與所供應的數據的真實位置的信息一起發送。再次,這個例子被高度簡化並被重寫,配置在其原始形式中是非常有意義的。而問題更多的是爲什麼「重寫」會導致「301」。至少,這沒有記錄,不在重寫模塊的官方頁面上。 –

+0

試試別名指令:http://wiki.nginx.org/HttpCoreModule#alias –

+0

試過。一樣。在瀏覽器中,Nginx發送一個'301'並將URL改爲'http:// example.com/phpmyadmin /',而它應該保留爲'http:// example.com/pma'。 –

0

我認爲你需要使用的,而不是改寫別名。重寫創建一個「新」的URL,因此它是一個重定向

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