Назад | Перейти на главную страницу

Обслуживать пустую страницу 404 с помощью mod_rewrite

у меня есть 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 (Запрещено) - какая разница, что видит (вредоносный) клиент?