Перенаправление с запросами

У меня очень раздражающая переадресация, которую я не могу понять.

У меня много сотен страниц, как показано ниже:

example.com/directory/in.php?url_id=28930

Я хочу перенаправить все, например, / directory / in .php? url_id = 28930

Все перенаправления пойдут на домашнюю страницу.

Какое правило перенаправления вы могли бы предложить?

Я уже пробовал много правил перенаправления, но все по какой-то причине не работают.

1
задан 6 June 2018 в 21:55
1 ответ

Для проверки конкретных строк запроса вам необходимо использовать директиву mod_rewrite и RewriteCond, которая проверяет по серверной переменной QUERY_STRING. (Шаблон RewriteRule совпадает только с URL-путем, что, в частности, исключает строку запроса)

Например, для перенаправления конкретного URL /директории/in.php? url_id=28930 в корневом файле .htaccess можно сделать что-то вроде:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^url_id=28930$
RewriteRule ^directory/in\.php$ / [QSD,R=302,L]

Флаг QSD (Query String Discard - Apache 2.4+ только) удаляет строку запроса из перенаправленного URL. Если вы работаете с Apache 2.2, то для эффективного удаления строки запроса с перенаправленного URL вам нужно добавить ? в конец строки substitution, т.е. /?. В противном случае, по умолчанию, строка запроса из запроса передается на целевой URL (т.е. аргумент susbstitution).

Обратите внимание также, что это временный 302-й редирект. Если предполагается, что оно является постоянным, измените параметр 302 на 301 только в том случае, если вы уверены, что он работает нормально (чтобы избежать проблем с кэшированием).

Чтобы сделать это более общим и перенаправить любой URL, содержащий числовое значение параметра url_id, затем измените директиву RewriteCond на что-то вроде:

RewriteCond %{QUERY_STRING} ^url_id=\d+$

Aside: С точки зрения SEO, такие массовые перенаправления на домашнюю страницу, скорее всего, будут восприниматься Google и другими поисковыми системами как soft-404s.

.
1
ответ дан 3 December 2019 в 23:15

Теги

Похожие вопросы