使用 nginx 和 Drupal,如何为存在的静态文件和目录提供 404 错误?

使用 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 节点,其中有一个互联网上最有趣的 404 页面。

我的 nginx 配置已包含一个@drupal将请求传递给 Drupal 的块。因此我想将请求传递给 Drupal,但我不希望 Drupal 尝试提供现有的静态文件,而只是提供 404 页面。

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

不幸的是,Google 在这方面没有提供太多帮助;大多数人似乎遇到了相反的问题。如何将对目录.git.gitignore文件中的任何内容的请求发送到 Drupal 的 404 页面?

答案1

尝试为目录创建一个位置块.git并将其设置为内部的。这将触发任何请求的 404 响应。如果这些没有传递给 Drupal,您可能需要定义一个错误页面这样做。

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

另一种选择是将这些请求重写为不存在的内容:

rewrite ^/.git /notfound;

相关内容