У меня очень раздражающая переадресация, которую я не могу понять.
У меня много сотен страниц, как показано ниже:
example.com/directory/in.php?url_id=28930
Я хочу перенаправить все, например, / directory / in .php? url_id = 28930
Все перенаправления пойдут на домашнюю страницу.
Какое правило перенаправления вы могли бы предложить?
Я уже пробовал много правил перенаправления, но все по какой-то причине не работают.
Для проверки конкретных строк запроса вам необходимо использовать директиву 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.
.