使用 mod_rewrite 提供空白的 404 页面

使用 mod_rewrite 提供空白的 404 页面

我有一个Drupal网站包含以下默认mod_rewrite规则

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteCond %{REQUEST_URI} !=/server-status
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

这意味着与现有文件或目录匹配的请求将直接被满足,而不是触发脚本index.php

问题在于,对不存在的文件的请求不符合上述规则,并被重定向到index.php引导整个Drupal应用程序并不必要地加载网站。

为了绕过Drupal丢失的文件,我创建了以下规则:

  RewriteCond %{REQUEST_URI} (.jpg|.jpeg|.css|.js|.png)$
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule .* - [L,R=404]

这是可行的,但问题是404重定向依赖于ErrorDocument 404 /index.php最终的引导Drupal

我需要保留,ErrorDocument 404 /index.php因为Drupal它用于404为动态内容提供有用的页面。我尝试定义几个ErrorDocument 404(1 个在我的规则之前,1 个在 Drupal 规则之前),但只有最后一个适用。

问:如何404在不改变指令的情况下为不存在的文件的请求提供空白页面ErrorDocument 404

答案1

我想这就是你想要的:使用 Mod_Rewrite 模拟 ErrorDocuments

答案2

是否使用不同的 HTTP 状态代码?

比如说,403(禁止)——恶意客户端看到什么有什么关系?

相关内容