
На нашем сайте мы часто удаляем страницы, на которых истек срок действия контента, и хотим возвращать 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 в зависимости от того, существовал ли ресурс ранее или нет.