Nginx

Nginx重寫規則子文件夾404錯誤

  • April 1, 2016

我不知道應該如何使用 Nginx 重寫規則設置我的 index.php 文件,它將像下面的範例一樣工作。

如果我訪問 url,它會給我 404 錯誤 not found instad echo ‘hello’。

網址:

http://www.example.com/directory/sub-directory/

來自給定 URL 的 /sub-directory/ 實際上不是 /directory/ 中的真實目錄。如果我訪問該 URL,我會收到 404 錯誤 - 這確實可以,但 /sub-directory/ 是友好的 URL(沒有查詢?argument=value)。

/sub-directory/ 不是固定值(在下面的範例中是),它可以是 /sub-directory-new/ - 取決於。

那麼,對於 URL 中 /directory/ 之後 /value/ 中的任何值,如果我訪問那種 URL,我怎麼可能不會收到 404 錯誤?

/目錄/中的Index.php:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$wanted = "sub-directory";

$tokens = explode('/', $actual_link);
$result =  $tokens[sizeof($tokens)-2]; // result is "sub-directory"
if($wanted == $result) {
   echo "hello";
}

Nginx:

location /directory {
   try_files $uri $uri/ /directory/$uri;
   error_page 404 =200 /directory
}

我是否應該為規則添加一些參數,例如:location /directory$1?如果是這樣,是哪一個以及如何讓它工作?

有人有什麼想法嗎?

感謝分享和資訊!

在 nginx 中做友好 URL 的常用方法是這樣的:

location /directory {
   try_files $uri $uri/ @rewrites;
}

location @rewrites {
   rewrite ^ /directory/index.php;
}

此配置假定您的root指令指向所在的目錄/directory

所以,這裡 nginx 會先嘗試文件或目錄是否存在於真實的文件系統中。如果該文件不存在,那麼它將請求轉發到您的 PHP 文件。當然,您需要在 nginx 中正確配置 PHP 處理塊。

引用自:https://serverfault.com/questions/767440