2013-02-12 110 views
0

我們正在將PHP站點從Apache移植到NGINX,並在嘗試讓NGINX識別從站點URL傳遞到index.php的參數時遇到了一個問題。.htaccess URL參數重寫爲NGINX

我們在Apache的.htaccess命令如下

RewriteEngine on 

RewriteBase/

RewriteRule ^([^/.]+)/([^/.]+)/([^/.]+)[/]?$ /index.php?market=$1&area=$2&id=$3 [L] 

該規則允許的index.php明白$市場來自於第一URL參數,$區來源於第二和$ ID來自第三。

所以,www.domain.com/miami/profiles/100提供的index.php以$市場=邁阿密,$面積=曲線並且$ id = 100

我們已經想盡了各種失敗的解決方案希望能在網站的NGINX conf文件中達到同樣的效果。這裏有一些我們已經試過了不起作用:

location /sitename { 
    root /www/sitename; 
    try_files $uri /sitename/index.php?market=$args&area=$args&id=$args; 
} 


location /sitename { 
    root /www/sitename; 
    try_files $uri /sitename/index.php/?market=$args?area=$args?id=$args; 
} 



location /sitename { 
    rewrite "^/index.php/([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]{3})$" 
    /index.php?market=$1&area=$2&id=$3 last;  
} 

任何人能發現我們在做什麼錯在這裏向我們展示的解決方案?

回答

1

您嘗試像這樣訪問網站:「www.domain.com/miami/profiles/100」,但在您的重寫規則中指定請求URL必須包含「index.php」,因此您應該訪問它像這樣:「www.domain.com/index.php/miami/profiles/100」。或修改您的正則表達式了一點,所以它看起來更清潔:

location /sitename { 
    rewrite "^/([a-zA-Z]+)/([a-zA-Z]+)/([a-zA-Z]{3})$" 
    /index.php?market=$1&area=$2&id=$3 last;  
} 

現在,您可以訪問網站,你想要的方式: www.domain.com/miami/profiles/100

+0

感謝您指出了這一點。我把你修改後的重寫,仍然沒有得到我期待的行爲。 – user2062272 2013-02-15 18:58:30

+0

我寫了一個獲取URL變量到index.php的新方法。因此,現在我定義從server_URI創建的數組中的$ market,$ area和$ id變量。這裏是代碼: – user2062272 2013-02-15 19:00:57

+0

$ url_parts = explode('/',$ _ SERVER ['REQUEST_URI']);如果 (isset($ url_parts [ '1'])){ \t \t $市場= $ url_parts [ '1']; } 如果(isset($ url_parts [ '2'])){ \t \t $面積= $ url_parts [ '2']; } 如果(isset($ url_parts [ '3'])){ \t $ ID = $ url_parts [ '3']; \t } – user2062272 2013-02-15 19:01:46