#apache #.htaccess
#apache #.htaccess
Вопрос:
Я пытаюсь сделать все URL-адреса для https://www.example.com/page/
перенаправления на 404.
Проблема, с которой я сталкиваюсь, заключается в том, что каждое число после /page/
перенаправляется на домашнюю страницу и индексируется, что приводит к штрафу за дублирование содержимого.
На данный момент у меня проиндексировано около 30 страниц, которые все перенаправляют на домашнюю страницу.
Я хотел бы иметь любой URL-адрес с номером после /page/
404 (с заголовком 404), чтобы я мог деиндексировать все эти страницы.
До сих пор я пробовал:
Redirect 404 ^page/(.*)$
или Redirect 404 /page/*
Неудивительно, что это не сработало — где я ошибаюсь?
Комментарии:
1. Не могли бы вы сообщить нам, есть ли пользовательский
404.php
файл, на который вы хотите отобразить ошибку (пользовательскую ошибку, для наглядности), на которую вы хотите перенаправить?2. У вас есть другие директивы в вашем
.htaccess
файле? Может быть предпочтительнее использовать mod_rewrite вместо этого, если у вас есть существующие директивы mod_rewrite .
Ответ №1:
Redirect 404 ^page/(.*)$
илиRedirect 404 /page/*
Вы близки, за исключением того, что Redirect
директива использует простое сопоставление префиксов, она не использует регулярное выражение (регулярное выражение) или подстановочный знак.
чтобы все URL
https://www.example.com/page/
-адреса перенаправлялись на 404.
Чтобы выполнить все запросы на /page/
результат в 404, независимо от того, следует ли за ним число или нет, вы должны использовать следующее:
Redirect 404 /page/
Как отмечалось выше, Redirect
директива использует простое сопоставление префиксов, поэтому приведенное выше значение 404 для любого URL-адреса, начинающегося с /page/
.
Однако ….
любой URL-адрес, который имеет номер после
/page/
404
Чтобы специально использовать 404 для URL /page/<number>
-адресов только формы, а не /page/
тогда, вам нужно RedirectMatch
будет вместо этого использовать директиву, которая использует регулярное выражение для сопоставления, а не для сопоставления с префиксом.
Например:
RedirectMatch 404 ^/page/d $
d $
соответствует 1 или более цифрам в конце URL-пути. Таким образом, приведенное выше будет соответствовать /page/1
и /page/123456
, но не /page/
или /page/abc
или /page/123z
и т.д.
Если вместо этого вы хотели сопоставить /page/<something>
where <something>
буквально что угодно, но не /page/
только совпадение. Тогда вы могли бы вместо этого использовать следующее:
RedirectMatch 404 ^/page/.
Приведенное выше соответствует /page/
началу URL-пути, за которым следует по крайней мере 1 другой символ.
Обратите внимание, что, хотя мы используем Redirect
RedirectMatch
здесь директивы and , внешнего перенаправления нет (ответ 3xx). 404 обслуживается Apache в качестве внутреннего подзапроса. Apache отправляет заголовок 404 Not Found .
Однако, если вы специально хотите быстрее «деиндексировать» эти страницы, подумайте о том, чтобы вместо этого отправить «410 Gone». Это более сильный сигнал для поисковых систем о том, что страница не возвращается. В этом случае вы также можете использовать gone
ключевое слово вместо кода 410
состояния.