我有一个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(禁止)——恶意客户端看到什么有什么关系?