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