Как получить 404 URL-адреса в .htaccess?

#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 состояния.