Конкретное 30-кратное перенаправление

Как мне сделать 30-кратное перенаправление в htaccess, но только для URL-адресов, которые начинаются с этого:

http://example.com/x/*

Я хочу перенаправить их на (HTTPS):

https://example.com/x/*
  • как в подстановочном знаке, например: example.com/x/batman

Я не хочу, чтобы перенаправление влияло на какие-либо другие URL-адреса в этом домене.

Я могу выполнить это перенаправление с помощью PHP, но я понимаю, что если я сделаю это в моем файле .htaccess , это будет немного быстрее, поскольку PHP не будет должны быть выполнены. Это правильно? По сути, я пытаюсь сделать как можно быстрее прямую.

Это то, что у меня есть, но совсем немного. Он действительно работает и успешно перенаправляет https на http, но мне нужно, чтобы это было только для определенных URL-адресов, которые следуют описанному выше шаблону:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
1
задан 14 August 2019 в 23:45
1 ответ
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Для соответствия определенному пути URL-адреса, который начинается с /x/, измените RewriteRule на чтение ^x/ (без префикса косой черты). Например:

RewriteRule ^x/ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Перед тестированием необходимо очистить кэш браузера. (По этой причине проще сначала протестировать с временными 302 редиректами.)

Однако, пара заметок относительно ваших директив...

  • Очевидно, что это перенаправление с HTTPS на HTTP - обратное тому, что вы сказали в предыдущем примере (и очень не рекомендуется в 2019 году)?!

  • Использование переменной окружения HTTPS - (т.е. %{ENV:HTTPS}) является нестандартным. Предположительно, это по указанию вашего хоста?


https://example.com/?wildcard будет перенаправлено на http://example.com/wildcard

Шаблон RewriteRule pattern (например, ^x/ выше) совпадает только с URL-путем, что, в частности, исключает часть строки запроса из URL-адреса.

Для соответствия строки запроса нужна директива RewriteCond (condition), которая соответствует серверной переменной QUERY_STRING.

Например, для перенаправления примера . com/?foo на example.com/foo, вы сделаете что-то вроде:

RewriteCond %{QUERY_STRING} ^(foo)$
RewriteRule ^$ /%1 [QSD,R,L]

Где %1 - обратная ссылка на первую захваченную группу в последнем совпадающем условии. Обратите внимание, что в приведенном выше примере нет URL-пути (обозначается регексом ^$). Флаг QSD (Query String Discard) - reqd для удаления строки запроса из перенаправленного URL.

Если вы хотите использовать более "подстановочный" вариант (который соответствует чему-либо в строке запроса), как показано в вашем примере, то что-то вроде:

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ /%1 [QSD,R,L]

Обратите внимание, что флаг R без кода статуса по умолчанию установлен на 302 (временный) перенаправление.

).
0
ответ дан 4 December 2019 в 02:44

Теги

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