Войти

Показать полную графическую версию : .htaccess и редирект с http на ту же страницу с https. Но у уже есть один RewriteRule


Svetik2000
01-07-2023, 10:07
Добрый день
Встала задача сделать редирект с http страницы на такую же страницу с https
Проблема в том, что у меня уже есть один RewriteRule в .htaccess
и не понимаю как сделать что бы они оба отрабатывали

вот код

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301]
RewriteRule ^/?([^/]+)/([^/]+)/(\d+)$ /index.php?param=$3 [L]


Выдает ошибку ERR_TOO_MANY_REDIRECTS

Sham
01-07-2023, 10:51
%{HTTP:X-HTTPS} !1 »
%{HTTPS (https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewritecond:~:text=the%20mod_remoteip%20module).-,HTTPS,on%22%20if%20the%20connection%20is%20using%20SSL/TLS%2C%20or%20%22off%22%20otherwise.,-(This%20variable%20can)} "off"

Svetik2000
01-07-2023, 11:22
%{HTTPS} "off" »
добавить после той строчки или заменить ее?

Sham
01-07-2023, 12:33
На самом деле зависит от конфигурации. Если apache получает проксируемые запросы без шифрования (от nginx например), то эти редиректы должны быть настроены в конфиге nginx. Либо если действительно должен передаваться X-HTTPS от nginx, то надо проверять его наличие в http-заголовках у apache.

Svetik2000
01-07-2023, 14:32
nginx не стоит
заменила строчку на вашу.
при обращение по http редиректа не произошло
по https выдало 404 ошибку

Svetik2000
06-07-2023, 20:31
Ну или с помощью php кода как можно это сделать?
что бы со страницы http:/site.ru/bla-bla-bla/be-be-be/pageNNN.php
был редирект на https:/site.ru/bla-bla-bla/be-be-be/pageNNN.php

Sham
06-07-2023, 21:13
Сделайте что-ли для какого-нибудь file.php с содержимым var_dump($_GET); правило RewriteRule file.php file.php?https=%{HTTPS}&x=%{HTTP:X-HTTPS} [END]
Запускайте этот файл с https и без. Выводы в студию. То есть содержимое этих переменных при запросе.

Svetik2000
07-07-2023, 11:32
Добрый день.

с http
array(2) { ["https"]=> string(3) "off" ["x"]=> string(0) "" }

с https
array(2) { ["https"]=> string(2) "on" ["x"]=> string(0) "" }

содержимое .htaccess выглядит сейчас так:


RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^/?([^/]+)/([^/]+)/(\d+)$ /index.php?param=$3 [L]
RewriteRule tmp.php tmp.php?https=%{HTTPS}&x=%{HTTP:X-HTTPS} [END]



при запросе с http редиректа на https не произошло

Sham
07-07-2023, 13:38
на выбор RewriteCond %{HTTPS} =off
RewriteCond %{THE_REQUEST} "\s/(\S*)\s"
RewriteRule ^ https://%{HTTP_HOST}/%1 [R,L]
или
RewriteCond %{HTTPS} =off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{HTTP:X-HTTPS} !1 »
это лишняя строка
редирект лучше размещать выше всех отдельных RewriteRule-ов, иначе исходный REQUEST_URI может измениться.

Svetik2000
08-07-2023, 08:07
Спасибо
Вроде бы помогло.
Буду мониторить




© OSzone.net 2001-2012