Как перенаправить URL со строкой запроса на другой URL со строкой запроса, используя .htaccess

#regex #.htaccess #redirect #mod-rewrite #query-string

#регулярное выражение #.htaccess #перенаправление #мод-перезапись #строка запроса

Вопрос:

Во-первых, позвольте мне начать с того, что я не очень разбираюсь в .htaccess. Я выполнил поиск через StackOverflow и нашел много примеров перенаправления, но не смог найти ни одного, который выполнял бы то, что я пытаюсь выполнить.

Я пытаюсь перенаправить определенные URL со строками запроса на другой URL со строкой запроса. Значения строки запроса являются динамическими.

Например, я хотел бы перенаправить это:

 https://www.example.com/page/?search=search_stringamp;param1=whateveramp;param2=whatever
  

К этому:

 https://www.example.com/?s=search_string
  

В первом URL-адресе меня не волнуют никакие параметры, кроме значения «поиск«. Значение ‘search’ в первом URL будет значением ‘s’ во втором URL. Я хочу удалить все остальные параметры. Имейте в виду, что значение ‘search’ в первом URL является динамическим.

Я попробовал следующее, но безуспешно:

 RedirectMatch 301 ^/page/?(.*)$ https://www.example.com/?$1
  

Ответ №1:

Вам нужно будет использовать mod_rewrite здесь, чтобы иметь возможность проверять и извлекать значения из QUERY_STRING .

 RewriteEngine On

RewriteCond %{QUERY_STRING} (?:^|amp;)search=([^amp;] ) [NC]
RewriteRule ^page/?$ /?s=%1 [L,NC,R=302]
  

Комментарии:

1. Большое спасибо! Это сработало отлично. Из любопытства, почему вы указали статус 302, а не 301?

2. Поскольку 301 это постоянное перенаправление, я сохранил его 302 только для тестирования. После подтверждения сделайте это 301 .