2017-04-10 203 views
0

我正在將應用程序從Apache移動到nginx,並且我被重寫部分卡住了。將htaccess重寫轉換爲nginx重寫

在我的Apache .htaccess中,我有這個。基本上,將一切,包括查詢變種以我的index.php

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ index.php?p=$1 [QSA,L] 

裏面的index.php我有一個非常基本的部分,打破下來,所以我可以路線訪問者,他們需要去哪裏,也處理查詢變種

if (isset($_GET['p'])) { 
    $page = explode('/', $_GET['p']); 
} else { 
    $page = NULL; 
} 

而且在腳本後

if ($page) { 
    } if ($page[0] == "stream") { 
     if (isset($page[1])) { 
      // Blah 
     } 
    } 
} 

同樣在各種主題的PHP文件,我已經抓住我的URL與$_GET['id']或瓦爾做各種功能。

例如http://example.com/verify?code=blah

該URI進入index.php,驗證被發現是一個名爲verify.php的主題文件,在verify.php內抓取代碼url var。

我正在尋找與nginx一起復制,並陷入困境。我已經試過以下:

 location/{ 
#    try_files $uri $uri/ =404; 
       rewrite ^(.*)/?$ index.php?p=$1 last; 
#    try_files $uri $uri/ /index.php?p=$args; 
#    try_files $uri $uri/ /index.php?p=$query_string; 
     } 

我甚至試過example from this answer,但仍然沒有工作。

在這裏,我試圖把它應用到我的設置:

location/{ 
     rewrite ^(.*)/?$ index.php?p=$1 last; 

     try_files $uri $uri/ @rewrite; 
} 
location @rewrite { 
     rewrite ^(.*)/?$ index.php?p=$1 last; 
} 

的註釋的部分是我的試驗和錯誤。關於如何將Apache複製到nginx格式的任何見解?

+0

您可以將其標記爲重複。起初那個引用的答案並沒有解決我的問題,但最終確實如此。感謝 – Pat

回答

0

你試過this的網站嗎?

location/{ 
    if (!-e $request_filename){ 
     rewrite ^/(.*)/?$ /index.php?p=$1 break; 
    } 
} 
+0

有趣的是,它希望我下載頁面而不是加載頁面。例如,如果我訪問http://example.com/about,它希望我下載「about」。如果我下載它,內容是我的原始php'index.php'文件 – Pat

0

我不想回答我的問題,但在我的問題的answer referenced實際上是正確的答案。我希望這將有助於未來的人。

我有點太急於嘗試這個答案,並且因爲上面的代碼片段失敗了,因爲我把我的重寫放在了兩次。工作解決方案只是把我的重寫只寫在重寫位置。

location/{ 
      try_files $uri $uri/ @rewrite; 
    } 

    location @rewrite { 
      rewrite ^/(.*)/?$ /index.php?p=$1 last; 
    } 

這(迄今)已成功地工作。它將URL重寫爲特定的php主題頁面,主題頁面可以訪問查詢變量。