2013-10-19 46 views
0

我認爲在Nginx中重寫會很簡單。它看起來不是。NGINX - 改寫花式網址

我想從你們一些幫助。我以前的設置是Apache2 + PHP。我的新設置是Nginx + PHP-FPM。

我想從Apache2的變換一個簡單的虛擬主機。

的目錄結構是:

  • /API(這是根)

    • VERSION(1)

      --- api.php

      - - .htaccess

Fx的。使用domain.tld/1/

的.htaccess文件看起來是這樣的:

RewriteEngine on 
RewriteRule ^([a-z]+)/([a-z]+)/api.json$ api.php?app=$1&sapp=$2 [L,QSA] 
RewriteRule ^([a-z]+)/api.json$ api.php?app=$1 [L,QSA] 

我的新的Nginx服務器上的文件看起來是這樣的:

server { 
     listen 80; 
     root /var/www/domain.tld/api; 
     index index.php index.html; 

     server_name domain.tld; 

     location /1/ { 
       rewrite ^/([a-z]+)/([a-z]+)/api\.json$ /api.php?app=$1&sapp=$2; 
       rewrite ^/([a-z]+)/api\.json$ /api.php?app=$1; 
     } 

     location ~ \.php$ { 
       include php5; 
     } 
} 

但是當我嘗試它不工作視圖:使用domain.tld/1 /視圖/ api.json或使用domain.tld/1 /視圖/擴展/ api.json

任何人都可以解釋和舉幾個例子來解決這一問題?

在此先感謝。

回答

0

看看nginx怎麼處理location塊,在這裏:http://nginx.org/en/docs/http/request_processing.html

正如你可以在你的情況下看到的請求的,只有你location /1/塊擔任,因爲這是兩個匹配的只有一個。問題是,NGiNX每個請求只使用一個位置塊,因此一旦進入location /1/塊,它將不會在稍後進入其他位置塊。 此處的解決方案還包括在末尾的location /1/塊中包含php5文件。

location /1/ { 
    rewrite ^/([a-z]+)/([a-z]+)/api\.json$ /api.php?app=$1&sapp=$2; 
    rewrite ^/([a-z]+)/api\.json$ /api.php?app=$1; 
    include php5; 
}