Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wymuszenie polączenia ssl
Forum PHP.pl > Forum > Serwery WWW > Apache
Marles93
Witam,
Mam problem z wymuszeniem połączenia ssl na stronie.
Mam postawiony apache2 z uruchomiona obłsuga SSL.
Jak wpisze ręcznie https:// strona otwiera się bez zadnego błędu lecz chce aby konkretne podstrony otwierały sie w połączeniu szyfrowanym. Tzn ze np.
xyz.pl/0.1.0/index.php ma byc w normalnym połączniu a xyz.pl/0.1.0/index.php?page=login_ssl w połączeniu szyfrowanym.

Miałem juz kilka podejsc lecz za każdym razem wymuszało ssl na całą stronę a nie poszczególną podstronę (stronę logowania)

Prosze o jakąś pomoc.
Pozdrawiam Marles

Od razu sorry za dubel postów, ale sprawa jest dość pilna.
Ewentualnie czy jest możliwość aby w .htaccess ustawić tak ze, adresy zawierające xyz.pl/0.1.0/index.php?page=login_ssl będą w normalnie w http a adresy zawierające xyz.pl/0.1.0/index.php?secure=login_ssl w https ?
by_ikar
http://eriz.pcinside.pl/weblog/mod_rewrite...ac-208.html#t44

w twoim przypadku wyglądało by to tak:

Kod
RewriteCond %{HTTPS} off
RewriteRule ^/index.php?page=login_ssl https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Marles93
no dobra takie coś jus stosowałem, lecz po przejściu w https wybiorę stronę główna to i tak dalej zostaje w https a powinno przejść w http. Czy istnieje jakaś możliwość żeby w index.php wstawić regule która będzie przekierowywała jeśli w adresie znajdzie się secure ?

cos w stylu

Kod
if ($_GET['secure'])
header ('Location: https://xxx.pl/index.php?secure=login_ssl);


z tym ze coś z tym warunkiem jest nie tak bo tworzy się pętla i nie wiem jak zrobić żeby działało i żeby zamiast https://xxx.pl/index.php?secure=login_ssl była reguła która przepisywała by adresy dodając https z przodu bo stron w https będzie więcej.

temat można zamknąć... już sobie poradziłem sam. Wstawiłem takie oto warunki w index.php

  1. $adres= $_SERVER['REQUEST_URI'];
  2. $port= $_SERVER['SERVER_PORT'];
  3. if((strstr($adres, "secure")!==False) and $port!=443)
  4. header("Location: https://{$_SERVER["SERVER_NAME"]}{$_SERVER["REQUEST_URI"]}");
  5. if(((strstr($adres, "page")!==False) or $adres=="/index.php") and $port!=80)
  6. header("Location: http://{$_SERVER["SERVER_NAME"]}{$_SERVER["REQUEST_URI"]}");
by_ikar
Nawet nie zajrzałeś do linka który ci podałem smile.gif

Kod
RewriteCond %{HTTPS} on
RewriteRule ^/(^[rejestracja|logowanie]) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Marles93
Na podaną przez Ciebie stronę zaglądałem już kilka razy. Ale takie rozwiązanie jak ja zrobiłem akurat do mojej strony jest moim zdaniem lepsze.
by_ikar
Cytat(Marles93 @ 20.10.2011, 22:02:03 ) *
Na podaną przez Ciebie stronę zaglądałem już kilka razy. Ale takie rozwiązanie jak ja zrobiłem akurat do mojej strony jest moim zdaniem lepsze.


No to skoro wiesz lepiej, nie rozumiem czemu pytasz się o pomoc smile.gif
Marles93
Nie mówię, że wiem lepiej. Po prostu trochę trwało zanim to ogarnąłem dlatego poprosiłem o pomoc. Tylko trochę to trwało zanim ktoś mi odpowiedział. Ale mniejsza o to, ważne że działa.

Nie chce tworzyć nowego tematu wiec podpinam to pod ten.
Czy idzie jakoś w htaccess zrobić tak żeby zmienić wyświetlany adres ?
tak wygląda mój aktualny htaccess

Kod
Options FollowSymLinks
RewriteEngine on

RewriteRule ^secure/logowanie$ /0.9.2/index.php?secure=have_acc1 [R=301,L]


po wpisaniu w adresie domena.pl/secure/logowanie otwiera mi się tak jak powinno domena.pl/0.9.2/index.php?secure=have_acc1.

Chciałbym teraz żeby w pasku adresu zmienić wyświetlany adres, bo wpisaniu domena.pl/secure/logowanie i po załadowaniu strony pokazuje się oryginalny adres
czyli domena.pl/0.9.2/index.php?secure=have_acc1 a chciałbym ze został secure/logowanie
by_ikar
Kod
RewriteRule ^secure/logowanie$ /0.9.2/index.php?secure=have_acc1 [L]


Tutaj masz info: http://eriz.pcinside.pl/weblog/mod_rewrite...zac-208.html#t2

Dokładnie chodzi o ten kawałek:

Kod
[R] - zamiast ukrycia prawdziwego adresu skryptu, serwer na niego przekierowuje (po ludzku: przeglądarka otwiera go tak, jakby był wpisany bezpośrednio do paska adresu). Opcjonalnie przyjmuje kod przekierowania, np. [R=301]


Nie to że chcę być złośliwy, tylko na prawdę, jakbyś przeczytał od deski do deski tamten wpis na blogu, to uwierz mi że większość problemów z htaccess byś rozwiązał właśnie za jego sprawą, bez powodu ci tutaj nie podałem tego linku, zauważ zresztą że już drugi raz w tym samym temacie go podaję. Na przyszłość, na prawdę chociaż wykaż odrobinę inicjatywy i zajrzyj nawet pobieżnie do materiałów które ktoś ci daje - ja tak zawszę robię. Jak się okazują beznadziejne to i tak przeważnie w połowię zamykam taką stronę. Ale tamten wpis IMO w 90% wyczerpuje temat htaccess.
Marles93
Dobra działa... nie wiem czego to była wina dokładnie bo próbowałem na samym początku z sama flagą [L]. Wczoraj po formacie załapało mi w przeglądarce jak powinno.

I uwierz że czytałem ten artykuł kilka razy i parę innych artykułów także. Odziwo u mojego kolegi który ma własny serwer i własną stronę reguła z flagą [L] też nie działało więc bez powodu tutaj nie pisze ...
by_ikar
Wiesz porównaj sobie to co podałeś że ci niedziała, z tym co ja ci dałem. Jedyne co usunąłem to z flagi wywaliłem przekierowanie: "R=301," nic więcej nie zrobiłem. Może linijkę wcześniej miałeś jakiś błąd który później poprawiłeś. Ciężko powiedzieć wink.gif
Marles93
A tak wracajac do tego jeszcze...

Cytat(by_ikar @ 20.10.2011, 15:44:58 ) *
Nawet nie zajrzałeś do linka który ci podałem smile.gif

Kod
RewriteCond %{HTTPS} on
RewriteRule ^/(^[rejestracja|logowanie]) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]



Jak dobrze rozumiem w nawiasie kwadratowym podaje się strony które nie maja być brane pod uwagę ?
by_ikar
Cytat
Jak dobrze rozumiem w nawiasie kwadratowym podaje się strony które nie maja być brane pod uwagę ?


Tak, sygnalizuje o tym daszek "^" który oznacza zaprzeczenie. W tej regułce te strony tylko nie będą brane pod uwagę jeżeli chodzi o połączenie https, czyli wymienione strony, są stronami które zostaną pominięte przy przekierowaniu na zwykłe połączenie http, wszystkie inne niż podane zostaną przekierowane na http.
Marles93
to nie wiem co robię źle ale nie działa mi ;/

Kod
#http > https
RewriteCond %{HTTPS} off
RewriteRule (have_acc|have_acc_1|register_2|order|twoje_konto_login)     https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

#https > http
RewriteCond %{HTTPS} on
RewriteRule (^[have_acc|have_acc_1|register_2|order|twoje_konto_login]) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]


z http na https działa ale w druga stronę nie ;/ próbowałem już kilka kombinacji dodając z przodu ^/ ale tez nic...

nie mogę dojść do ładu z tym ...

Kod
#http > https
RewriteCond %{HTTPS} off
RewriteRule (have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list)     https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

#https > http
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^(have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list) [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]


teoretycznie działa. Gdy wchodzę na jakąś stronę która nie jest w nawiasie i próbuje wejść na https to przeuca mnie na http.
Ale...
Jak wchodzę np na have_acc które powinno być w https tworzy się pętla i pokazuje się

Cytat
Nieprawidłowe przekierowanie


Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.

Problem ten może się pojawić w wyniku zablokowania lub odrzucenia ciasteczek.


Nie wiem co jest źle z tymi regułami. Już mi ręce opadają.
by_ikar
Kod
#http > https
RewriteCond %{HTTPS} off
RewriteRule ^/(have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R,L]

#https > http
RewriteCond %{HTTPS} on
RewriteRule ^/(^[have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list]) http://%{HTTP_HOST}%{REQUEST_URI} [NC,R,L]


?
Marles93
Jeśli wstawie ^/ przed nawiasami to nie działa (pewnie dla tego ze adres wyglada domena.pl/0.0.1/index.php) tak więc usunąłem te znaczniki i jest taka sama sytuacja jak wcześniej... Wywala pętle.


Cytat
[12:35:28.454] GET http://domena.pl/0.0.1/have_acc_1 [HTTP/1.1 302 Found 5422ms]
[12:35:33.893] GET https://domena.pl/0.0.1/have_acc_1 [HTTP/1.1 302 Found 250ms]
[12:35:34.152] GET http://domena.pl/0.0.1/have_acc_1 [HTTP/1.1 302 Found 1813ms]
[12:35:35.982] GET https://domena.pl/0.0.1/have_acc_1 [HTTP/1.1 302 Found 172ms]
[12:35:36.164] GET http://domena.pl/0.0.1/have_acc_1 [HTTP/1.1 302 Found 156ms]
[12:35:36.334] GET https://domena.pl/0.0.1/have_acc_1 [HTTP/1.1 302 Found 31ms]
by_ikar
Stad u ciebie {REQUEST_URI} się wzięło. Następnym razem musisz podawać takie informację, bo ja myślałem że strona logowania przykładowo ma wyglądać tak: domena.pl/twoje_konto_login a w takim wypadku to albo podasz ten kolejny "parametr" wtedy regułka wyglądała by tak:

Kod
#http > https
RewriteCond %{HTTPS} off
RewriteRule ^/0.0.1/(have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R,L]

#https > http
RewriteCond %{HTTPS} on
RewriteRule ^/0.0.1/(^[have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list]) http://%{HTTP_HOST}%{REQUEST_URI} [NC,R,L]


Albo takie w sumie poszukiwanie czy w adresie znajduje się podany ciąg:

Kod
#http > https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list)
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

#https > http
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} (^[have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list])
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]


Nie testowałem, sprawdź czy zadziała.
Marles93
w pierwszych postach podawałem dokładny adres.
Oczywiście plik htaccess umieszczony jest w folderze 0.0.1

Niestety 1 sposób nie działa ani z http na https ani odwrotnie.
Po usunięciu ^/0.0.1/ z http na http działa.
w druga stronę ni cholery ;/

drugi sposób też nie działa... tak jakby nie brał pod uwagę tego kawałka
Kod
(^[have_acc|have_acc_1|register_2|order|twoje_konto_login|user.edit|order.list])


ktoś ma pomysł jak zlikwidować ta pętle ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.