Nginx
使用 nginx 和 Drupal,我如何為存在的靜態文件和目錄提供 404 錯誤?
我使用 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;