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

Как обслуживать 410 от Apache, а не 404

На нашем сайте мы часто удаляем страницы, содержимое которых истекло, и мы хотим возвращать http-статус 410, а не 404 для запросов к страницам (физическим файлам), которые не существуют на нашем сервере (весь сайт сделан статических файлов).

Мы пробовали

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ - [G,L]

из это сообщение в блоге но это просто ломает весь наш сайт, обслуживая 410 для каждого запроса.

Мы используем Apache 2.2.3

    Redirect gone /path/to/resource

Это правильный способ сделать это. Если это вызывает у вас ошибки, убедитесь, что у вас есть mod_alias загружен на сервер.

Я считаю, что ответ Криса довольно хорош. Если вы не хотите использовать PHP-скрипт, он может стать:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$                - [G,L]

Не забывайте, что mod_rewrite страница также имеет компаньона mod_rewrite вики.

Создайте errorpage.php (или любой другой язык сценариев), и этот файл должен вернуть заголовок статуса http: 410 Gone, и добавьте следующее в вашу конфигурацию apache, которая в основном говорит, является ли запрошенный URL-адрес не файлом или каталогом (т.е. файл не существует), затем загрузите документ errorpage.php.

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /errorpage.php [L]

Errorpage.php может быть таким простым, как:

<?php header($_SERVER['SERVER_PROTOCOL'].' 410 Gone');

У вас также может быть, что errorpage.php содержит список (или другие средства отслеживания) удаленных страниц, чтобы он мог правильно возвращать статус HTTP 404 или 410 в зависимости от того, существовал ли ресурс ранее или нет.