Как мне сделать 30-кратное перенаправление в htaccess, но только для URL-адресов, которые начинаются с этого:
http://example.com/x/*
Я хочу перенаправить их на (HTTPS):
https://example.com/x/*
Я не хочу, чтобы перенаправление влияло на какие-либо другие URL-адреса в этом домене.
Я могу выполнить это перенаправление с помощью PHP, но я понимаю, что если я сделаю это в моем файле .htaccess
, это будет немного быстрее, поскольку PHP не будет должны быть выполнены. Это правильно? По сути, я пытаюсь сделать как можно быстрее прямую.
Это то, что у меня есть, но совсем немного. Он действительно работает и успешно перенаправляет https на http, но мне нужно, чтобы это было только для определенных URL-адресов, которые следуют описанному выше шаблону:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{ENV:HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
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 (временный) перенаправление.