у меня есть 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
директива?
Думаю, это то, что вам нужно: Эмуляция ErrorDocuments с помощью Mod_Rewrite
Использовать вместо этого другой код состояния HTTP?
Скажем, 403 (Запрещено) - какая разница, что видит (вредоносный) клиент?