Перенаправления .htaccess не соответствуют моему регулярному выражению - PullRequest
0 голосов
/ 21 марта 2019

Мне нужно перенаправить любые запросы со строками запроса из набора исходных URL-адресов обратно на страницу благодарности.

Например, мне нужно перенаправить:
http://example.com/test1/test2/[origin]/?id=1
обратно
http://example.com/thank-you

То, как я настроил его в моем файле .htaccess, таково:

RewriteEngine On
RedirectMatch 302 ^/test1/test2/(.*)/.+ /thank-you

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

Очевидно, мне пришлось добавить обратную косую черту, чтобы избежать косой черты в URL в тестере регулярных выражений, но, исходя из моего понимания того, как .htaccess оценивает регулярные выражения, этине нужны.

Мой вопрос: перенаправление отлично работает со страницы без строки запроса, если я удаляю .+ из конца строки регулярного выражения, что означает, что начальная часть регулярного выражения работаетхорошо.Я не понимаю, почему строка запроса не соответствует регулярному выражению, которое я создал.

Я также пытался:

RewriteCond %{REQUEST_URI} ^/test1/test2/(.*)/
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule (.*) /thank-you [R=302,L]

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Во-первых, не нужно RewriteEngine On с mod_alias, что по вашим правилам составляет RedirectMatch, используйте его с mod_rewrite, вторые правила.

Попробуйте это:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ [NC]
RewriteRule ^test1/test2/[^\/]+/$ /thank-you? [R=302,L]

Я использую ^id=([0-9]+)$, чтобы ограничить строку запроса для строки, начинающейся с id и заканчивающейся numerical value.

Я удаляю эту строку RewriteCond %{REQUEST_URI} ^/test1/test2/(.*)/, поскольку вы можете сопоставить URI и в RewriteRule.

Если это правило работает, замените [R=302,L] на [R=301,L], чтобы сделать его перенаправленным.

Примечание: очистить кеш браузера и протестировать

0 голосов
/ 21 марта 2019

Для вашего RedirectMatch вы можете использовать:

RedirectMatch 302 ^/test1/test2/(.*)/(.*)+ /thank-you?

Для вашего раздела RewriteRule вы можете использовать:

RewriteCond %{REQUEST_URI} ^/test1/test2/(.*)/
RewriteCond %{QUERY_STRING} id=([0-9]+) [NC]
RewriteRule (.*) /thank-you [R=302,L,QSD]
...