Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   редирект в .htaccess с https на http с параметрами (http://forum.oszone.net/showthread.php?t=351518)

Svetik2000 09-07-2022 12:05 2988142

редирект в .htaccess с https на http с параметрами
 
Добрый день.
Подскажите как реализовать...
есть урл вида https://my_site.ru/1/2/3
нужно сделать редирект на
http://my_site.ru/1/2/3

вариант вида
Код:

RewriteCond %{SERVER_PORT} ^443$ [OR] 
RewriteCond %{ENV:HTTPS} =on 
RewriteCond %{QUERY_STRING} section=1
RewriteRule ^(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

и подобное пока не помог.
делает переадресацию на урл http://my_site.ru/index.php?param=3

подскажите как можно реализовать?

либо через .htaccess либо через php

dmitryst 09-07-2022 13:04 2988146

Попробуйте Reverse Proxy, например

Svetik2000 09-07-2022 13:06 2988147

Цитата:

Цитата dmitryst
Попробуйте Reverse Proxy, например »

Спасибо за совет, но у меня виртуальный хостинг :-(
и доступа к настройкам Апача нет

dmitryst 09-07-2022 13:26 2988148

Код:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

а так? Сервер, разумеется, должен иметь валидный сертификат для https протокола, иначе получите security warning

Svetik2000 09-07-2022 13:36 2988150

В том то и дело, что сертификат невалидный, поэтому и возникла необходимость вернуть опять на http
В вашем варианте идет редирект на http://my_site.ru/index.php?param=3

Sham 09-07-2022 14:21 2988153

1. проверка сертификата идёт до разбора http запроса, поэтому браузер будет ругаться.
2. если REQUEST_URI имеем после других преобразований, то нужно смотреть сырой запрос. 303 не кэширует.
Код:

RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} \s(/1/2/3\S*)
RewriteRule ^ http://%{HTTP_HOST}%1 [R=303,L]


Svetik2000 12-07-2022 09:31 2988320

Цитата:

Цитата Sham
2. если REQUEST_URI имеем после других преобразований, то нужно смотреть сырой запрос. 303 не кэширует. »

Все равно делает переадресацию на урл http://my_site.ru/index.php?param=3

Sham 12-07-2022 11:01 2988326

301 редирект кэшируется. Смотрите Location в реальном ответе сервера. Может срабатывать какое-то предыдущее правило в конфиге.

Svetik2000 12-07-2022 11:34 2988327

конфиг выглядит так
Код:

ErrorDocument 404 /index.php

RewriteEngine On
RewriteRule ^(.*)/(.*)/([0-9]+)$ /index.php?param=$3 [L]
AddType application/x-httpd-php .html .php
Php_Flag display_errors Off
Php_Value short_open_tag Off


Sham 12-07-2022 12:17 2988329

ну вместо 1/2/3 регулярку свою вставить надо (если мой вариант).
RewriteCond %{THE_REQUEST} \s(/[^/]+/[^/]+/\d+\S*)

Svetik2000 13-07-2022 12:29 2988378

Сделала
Код:

RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} \s(/[^/]+/[^/]+/\d+\S*)
RewriteRule ^ http://%{HTTP_HOST}%1 [R=301,L]

но теперь вообще переадресации на http нет

Sham 14-07-2022 09:50 2988453

после RewriteEngine On? Проверено всё, изучайте все свои конфиги.

Svetik2000 14-07-2022 10:17 2988454

Цитата:

Цитата Sham
после RewriteEngine On? Проверено всё, изучайте все свои конфиги. »

конфиг выглядит так
Код:

ErrorDocument 404 /index.php

RewriteEngine On
RewriteRule ^(.*)/(.*)/([0-9]+)$ /index.php?param=$3 [L]

RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} \s(/[^/]+/[^/]+/\d+\S*)
RewriteRule ^ http://%{HTTP_HOST}%1 [R=301,L]


AddType application/x-httpd-php .html .php
Php_Flag display_errors Off
Php_Value short_open_tag Off


Sham 14-07-2022 11:16 2988459

Правила должны быть более конкретные, иначе будут нежелательные редиректы. Правило /*/*/111 слишком общее. Внешние редиректы лучше ставить раньше внутренних, до изменений путей и переменных. Чуток подправлено.
Код:

RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} \s(/[^/\s]+/[^/\s]+/\d+\S*)
RewriteRule ^ http://%{HTTP_HOST}%1 [R=303,L]
RewriteRule ^/?([^/]+)/([^/]+)/(\d+)$ /index.php?param=$3 [L]


Svetik2000 14-07-2022 11:45 2988460

сделала как в вашем примере. все равно редирект с https на http не работает

Sham 14-07-2022 12:05 2988462

Какая конфигурация серверов? Если апач за nginx'ом каким-нибудь, то по %{HTTPS} не узнать наверное про наличие https.

Svetik2000 14-07-2022 12:36 2988465

как это посмотреть на виртуальном хостинге?

Sham 14-07-2022 14:06 2988471

посмотрите вывод phpinfo() из-под https, есть ли там HTTPS или какой-нибудь HTTP_X_FORWARDED_PROTO

Svetik2000 14-07-2022 14:13 2988472

Вложений: 1
это имеете ввиду?

Sham 14-07-2022 15:13 2988480

Тогда что-то другое. Какая версия Apache? В старых версиях нет многих символов регулярных выражений. Может нет \d (означает любую цифру), тогда попробуйте ваш бывший вариант [0-9]. Насчёт пробельного символа \s не уверен, но можно попробовать заменить на простой пробел со слешем "\ ". \S (большой S) это наоборот любой непробельный символ.

Svetik2000 14-07-2022 15:18 2988481

Apache/2.4.6 (CloudLinux) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9 PHP/5.4.16

Sham 14-07-2022 18:12 2988498

в powershell выполните например
Код:

(Invoke-WebRequest -Uri https://my_site.ru/1/2/3 -SkipCertificateCheck -SkipHttpErrorCheck).RawContent
и смотрите где Location. Мне кажется это браузер мутит, запрещая небезопасные соединения.

Svetik2000 15-07-2022 09:42 2988552

не удается найти параметр, соответствующий имени параметра "SkipCertificateCheck"

Sham 15-07-2022 10:49 2988557

ну или
Код:

curl -Lvk "https://my_site.ru/1/2/3"
, или в хроме f12 на вкладке "сеть"...

Svetik2000 15-07-2022 14:30 2988585

и что должна увидеть?

Код:

* Connected to *****  port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [108 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4046 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: CN=*****
*  start date: May 10 23:58:16 2022 GMT
*  expire date: Aug  8 23:58:15 2022 GMT
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify result: unable to get local issuer certificate (20), c
ontinuing anyway.
} [5 bytes data]
> GET /1/2/3 HTTP/1.1
> Host: ***
> User-Agent: curl/7.73.0
> Accept: */*
>
{ [5 bytes data]
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx
< Date: Fri, 15 Jul 2022 11:58:02 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: PHP/5.4.45
<


dmitryst 15-07-2022 15:40 2988593

Цитата:

Цитата Svetik2000
и что должна увидеть? »

что сертификат не очень, но браузер его прожуёт ;)

Svetik2000 18-07-2022 10:39 2988732

Цитата:

Цитата dmitryst
что сертификат не очень, но браузер его прожуёт »

Вот поэтому и хочу отказаться от сертификатов

Sham 18-07-2022 16:54 2988774

Цитата:

Цитата Svetik2000
Server: nginx »

все конфиги в студию, nginx и apache, иначе не понять. htaccess может быть отключён.

Svetik2000 18-07-2022 17:08 2988775

Цитата:

Цитата Sham
все конфиги в студию, nginx и apache, иначе не понять. htaccess может быть отключён. »

как мне их вытащить на виртуальном хостинге?


Время: 10:09.

Время: 10:09.
© OSzone.net 2001-