Очистка 404 ошибок с 301 переписыванием мод или красивое решение - PullRequest
2 голосов
/ 06 июля 2011

У меня есть несколько веб-сайтов для моих клиентов, и у каждого клиента есть каталог, помеченный статьями. Я просто унаследовал эту систему, и пока я не смогу исправить обнаруженную проблему, я ищу решение с временным интервалом, которое устранит ошибки 404 после удаления файла.

Все эти каталоги имеют статические страницы для статей, а также индексную страницу со списком всех статей.

На основе журналов он генерирует много ошибок за последние годы. Я могу только представить, что это вызывает хаос в поисковых системах. Имея мало знаний о переписывании модов, которые у меня были, мне удалось собрать их вместе, которые я планирую разместить в конфигурации Apache. Прежде чем я это сделаю, это хорошее решение или есть что-то еще, что я должен сделать.

<Directory "/home/www/public_html/clients">
    Options +FollowSymlinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{HTTP_HOST} ^(.+)$ [NC]
    RewriteRule ^(.*)$ http://%1/articles/index.html [R=301,L]
</Directory>

RewriteCond %{REQUEST_FILENAME} !-f проверяет, существует ли файл и отображает ли его, игнорируя оставшуюся часть перезаписи.

RewriteCond %{REQUEST_FILENAME} !-d проверяет, существует ли каталог и отображает ли его, игнорируя оставшуюся часть перезаписи.

RewriteCond %{HTTP_HOST} ^(.+)$ [NC] захватывает домен, чтобы передать его последнему перезаписи как перенаправление 301.

У меня это работает локально, и мне нравится несколько мнений, прежде чем начать жить.

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Кажется действительным, по крайней мере, должно работать: -)

О перенаправлении 301 вы делаете постоянное перенаправление со страницы статьи на страницу, на которой, если я правильно понимаю, перечисляются доступные статьи. Для исчезнувших ресурсов существует лучший HTTP-код: 410 Gone:

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

Ответ 410 в первую очередь предназначен чтобы помочь задачи веб-обслуживания уведомив получателя о том, что ресурс намеренно недоступен и что владельцы серверов желают, чтобы удаленные ссылки на этот ресурс будут удален. Такое событие характерно для ограниченное время, рекламные услуги и за ресурсы, принадлежащие частным лицам больше не работает на сервере сайт. Не надо все отмечать постоянно недоступные ресурсы как «ушел» или сохранить отметку для любого отрезок времени - это осталось до на усмотрение владельца сервера.

Так что это был бы «лучший 404», который, возможно, предпочтут сканеры, по крайней мере, так будет HTTP. Если вам действительно нужно поведение Redirect (возможно, лучше для людей), тогда 301 - правильный выбор, но сканеры могут обнаружить множество ссылок на предыдущие ресурсы с тем же новым контентом. С другой стороны, это часто делается, поэтому я совершенно уверен, что у вас не возникнет никаких проблем.

301 против 410 трудно решить на самом деле. Существует также Redirect 303 See Other, который ... редирект, но, к сожалению, главная цель 303 - это скорее перенаправление после поста , чем перенаправление 410 с перенаправлением. С 303 старый URL не удаляется из поисковых индексов.

Последняя проблема, все случайные URL (легитимный 404) получат ответ (301 + 200 или 410), который может привести к ложному срабатыванию для нечетких злоумышленников в случае перенаправления ... но ложное срабатывание, возможно, хорошая вещь для этих сценариев они потеряют время на это.

0 голосов
/ 06 июля 2011
  1. Нет необходимости в RewriteCond %{HTTP_HOST} ^(.+)$ [NC] строке - просто замените %1 в RewriteRule на %{HTTP_HOST}

  2. С точки зрения переписывания решение состоит в том, чтоОК

  3. С точки зрения SEO - не очень уверен - лучше иметь вместо этого 404 или 410 (так как статьи больше нет).Я думаю, что будет лучше отображать пользовательскую страницу для клиента при отправке 404 или 410 в браузер:

    • Браузер / поисковая система увидит код ошибки
    • Пользователь увидит объяснение вместопока предлагается посмотреть связанные с запрошенными URL страницы / краткий указатель.
  4. от пользователя точка зрения - нехорошо: хотелось бы узнатьэтот URL / статья больше не доступна сразу (см. № 3) и просмотрите ваш сайт, если я нахожу это полезным, вместо того, чтобы увидеть какую-то неуместную (сначала) страницу индекса и сказать себе - я не помню, чтобы я щелкал по этой ссылке,и вернитесь к поисковой системе / рефералу и нажмите еще раз.Если я снова увижу ту же самую индексную страницу - я понимаю (скорее всего), что что-то не так с этой страницей, и просто отворачиваюсь (если только я действительно не заинтересован в содержании этой страницы).


ОБНОВЛЕНИЕ:

Я бы сделал это следующим образом:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/articles/ [NC]
RewriteRule .* /articles/notfound.php?url=%{REQUEST_URI} [L]
  1. Перенаправить несуществующие URL-адресаto notfound.php (или любое другое имя, которое он может иметь) ТОЛЬКО если запрашиваемый URL имеет какое-либо отношение к статьям (URL начинается с /articles/)

  2. На этой странице (должен бытьдинамический (PHP или аналогичный), а не статический HTML) отвечает 410 Gone Error Code (для браузера / паука) и отображает страницу, объясняющую, что этого URL больше нет, но вы можете посмотреть на эти ссылки (и некоторые полезные ссылки -может быть мини-индекс / последние статьи и т. д.) - это для пользователя.

...