Nginx

使用 nginx 和 Drupal,我如何為存在的靜態文件和目錄提供 404 錯誤?

  • August 9, 2012

我使用 git 部署了一個 Drupal 網站(好吧,開發人員部署它;我試圖讓他們遠離麻煩),因此該網站在文件根目錄中有一個目錄.git和一個文件.gitignore

目前,如果在 Web 瀏覽器中訪問這些文件,這些文件的權限足以導致 nginx 返回 403 Forbidden 錯誤。

但是,我希望 nginx 完全否認這個文件和目錄的存在,如果有人試圖在瀏覽器中訪問它們,則返回 404。

但是等等,還有更多!

真正想要的是讓瀏覽器接收 Drupal 生成的 404 錯誤頁面。在 Drupal 的admin/settings/error-reporting頁面中,我看到 404 錯誤被發送到http://www.example.com/404error,這是一個 Drupal 節點,它具有 Internet 上更有趣的 404 頁面之一。

我的 nginx 配置已經包含一個@drupal將請求傳遞給 Drupal 的塊。所以我想將請求傳遞給 Drupal,但我也不希望 Drupal 嘗試提供現有的靜態文件,而只是提供 404 頁面。

location @drupal {
   rewrite ^/(.+)$        /index.php?q=$1 last;
}

不幸的是,Google在這方面並沒有太大幫助。大多數人似乎有相反的問題。如何將.git目錄或.gitignore文件中的任何內容請求發送到 Drupal 的 404 頁面?

嘗試為.git目錄創建一個位置塊並將其設置為internal。這應該觸發任何請求的 404 響應。如果這些沒有傳遞給 Drupal,那麼您可能需要定義一個error_page來執行此操作。

location /.git {
   internal;
}
error_page 404 /notfound;

另一種選擇是將這些請求重寫為不存在的東西:

rewrite ^/.git /notfound;

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