Как мне сделать 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
шаблон (например. ^x/
выше) соответствует только URL-пути, что, в частности, исключает часть строки запроса URL.
Чтобы соответствовать строке запроса, вам понадобится RewriteCond
(состояние), которая соответствует директиве QUERY_STRING
серверная переменная.
Например, для перенаправления example.com/?foo
к example.com/foo
, вы бы сделали что-то вроде следующего:
RewriteCond %{QUERY_STRING} ^(foo)$
RewriteRule ^$ /%1 [QSD,R,L]
куда %1
- это обратная ссылка на первую захваченную группу в последнем совпавшем условии. Обратите внимание, что в приведенном выше примере нет URL-пути (обозначается регулярным выражением ^$
). В QSD
Флаг (Query String Discard) необходим для удаления строки запроса из перенаправленного URL.
Если вам нужен более "подстановочный" вариант (который соответствует что-нибудь в строке запроса), как вы, кажется, предлагаете в своем примере, тогда что-то вроде:
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^$ /%1 [QSD,R,L]
Обратите внимание, что R
флаг без кода состояния по умолчанию - 302 (временное) перенаправление.