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

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

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

Мы пробовали

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

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

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

решение1

    Redirect gone /path/to/resource

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

решение2

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

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

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

решение3

Создайте 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 в зависимости от того, существовал ли ресурс ранее или нет.

Связанный контент