Помощь по mod_rewrite необходима для кода состояния 410

Я хочу отправить код состояния 410, если есть ? на URL. Поскольку сайт работает только с URL-адресами с поддержкой SEO (как www.domain.com/seo-enabled-urls).

При поддержке сообщества StatckOverflow было сделано перенаправление 301, которое отлично работает:

RewriteBase /
RewriteRule ^romance-package-two\.html$ http://www.domain.com/wedding-champagne [QSA,NC,R=301,L]

Таким же образом я хочу добавить код сообщения 410, который сообщит, что Google (например, поисковые системы) окончательно удален, поэтому у нас не будет проблем с SEO неизвестными или не найденными URL.

Если URL выглядит так

www.domain.com/seo-enabled-urls?param1=val1&param2=val2

Я хочу сохранить тот же URL, но только с этим кодом 410, как это

RewriteCond %{query_string} ^(.*&)?$ [NC]
RewriteRule ^1$  same url code [QSA,NC,R=410,L]

Пожалуйста, помогите мне.

2 ответа

Решение

Нельзя перенаправить с помощью кода HTTP 410 - 410 означает, что запрошенная страница окончательно пропала и замены нет:

410 ушел

Запрашиваемый ресурс больше не доступен на сервере, а адрес пересылки неизвестен. Ожидается, что это условие будет считаться постоянным. Клиенты с возможностями редактирования ссылок ДОЛЖНЫ удалять ссылки на Request-URI после одобрения пользователя. Если сервер не знает или не имеет возможности определить, является ли условие постоянным, СЛЕДУЕТ использовать код состояния 404 (не найден). Этот ответ кешируется, если не указано иное.

- http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html


Соответствующее определение для HTTP 301 указывает, что это именно то, что вы хотели:

301 перемещено навсегда

Запрошенному ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс ДОЛЖНЫ использовать один из возвращенных URI. Клиенты с возможностями редактирования ссылок должны автоматически связывать ссылки на Request-URI с одной или несколькими новыми ссылками, возвращаемыми сервером, где это возможно. Этот ответ кешируется, если не указано иное.

- http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

Принятый ответ больше не является верным, по крайней мере, еще в Apache 2.0, где mod_rewrite поддерживает цель 410 GONE:

"ушел |G" (принудительно пропустить URL-адрес) Это приведет к тому, что текущий URL-адрес пропадет - он немедленно отправит ответ HTTP 410 (GONE). Используйте этот флаг, чтобы пометить страницы, которые больше не существуют, как пропавшие.

(см. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html)

Это означает, что правило, которое вы использовали выше, должно быть просто:

RewriteCond %{query_string} ^(.*&)?$ [NC]
RewriteRule ^1$ - [G]
Другие вопросы по тегам