Назад | Перейти на главную страницу

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

Как мне сделать 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 (временное) перенаправление.