#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
.