Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mod-rewrite i https -> http
Forum PHP.pl > Forum > Serwery WWW > Apache
redman2
Czy ktos wie, czemu po zastosowaniu takiej reguly w mod-rewrite

Kod
RewriteCond %{HTTPS} ^on$
   RewriteRule ^([a-z]+)$ http://%{HTTP_HOST}/$1.php [R]


i wpisaniu w przegladarce np : https://domena/index
przekierowuje mnie na http://domena/index.php zamiast http://domena/index

Dla mnie jest to co najmniej dziwne
seaquest
rotfl

Bo mu tak kazałeś.
$1.php masz w regule. jak dasz samo $1 to będzie dobrze.
redman2
Nie pisz proszę głupot jeżeli nie jesteś pewny, bo inny to też czytają.

$1.php określa do czego apache ma się odwoływać a nie, co pokazywać w pasku adresowym.

Podałem wyraźnie, że problem polega z przejściem z https na http.

Pozdrawiam
erix
Ale kolega ma rację. tongue.gif

RewriteRule ^([a-z]+)$ http://%{HTTP_HOST}/$1.php [R]
redman2
Oj, kolega chyba nie ma racji.

Jak w takim razie mod-rewrite bedzie wiedzialo do jakiego pliku sie odniesc ?

Odsylam do podstaw
erix
To już nie sprawa mod_rewrite, tylko przeglądarki, bo dajesz flagę [R], która nakazuje przeglądarce przejście pod nowy adres. tongue.gif

To tak samo, jakbyś dał:
  1. <?php
  2. header('Location: <a href=\"http://adres.pl/strona');&#092;" target=\"_blank\">http://adres.pl/strona');</a>
  3. ?>


Spróbuj najpierw, a nie uczysz się pływać na sucho. tongue.gif

IPB kisi adres, tu powinno być przekierowanie via PHP
redman2
Kolejny madry bez retorycznej odpowiedzi. Tym razem zawodowy ratownik.

To, ze robi, przekierowanie, to ja doskonale wiem. Zalozmy taki scenariusz. Jestem na formularzu z adresem:
Kod
   https://domena/forma/pl

teraz klikam na link: "/strona"

I po sprawdzeniu innej reguly, ktora nakazuje wszystkim stronom nie spelnaiajacym warunku (forma/pl) przekeirowanie na http,
zostane przekierowany na
Kod
   http://domena/strona.php

I teraz, jezeli jeszcze raz klikne na ten sam link "/strona"

regula zadziala i pojawi sie w pasku adresowym:
Kod
    http://domena/strona

Czyl regula dziala, ale problem pojawia sie tylko w przejsciu z https na http

Prosilbym, jezeli nie wiecie co z tym zrobic, to nie odpowiadajcie, bo naprawde szkoda czasu.

Pozdrawiam
erix
Cytat
Kolejny madry bez retorycznej odpowiedzi. Tym razem zawodowy ratownik.

A Ty zamotałeś pytanie. Jakoś i ~Seaquest zrozumiał problem tak samo, jak ja.

Cytat
Czyl regula dziala, ale problem pojawia sie tylko w przejsciu z https na http

Sory, ale jakoś do tej pory nie mogę się dowiedzieć, w czym masz problem. Piszesz problem, ale JAKI, to już nie:
Cytat
ale problem pojawia sie tylko w przejsciu z https na http

Czyli nie przekierowywuje? Czy przekierowywuje, ale mod_rewrite olewa inne regułki? Pisz konkretnie, to szybciej coś poradzimy. Najlepiej wklej wszystkie regułki przepisywania.
dr_bonzo
Eh?
1. Podajesz jedna z wielu regulek i tylko na jej podstawie mamy wiedziec co zle zrobiles?
2. Nadal nei rozumiem co chcesz osiagnac
3. Z tego co widze
Kod
RewriteCond %{HTTPS} ^on$
RewriteRule ^([a-z]+)$ http://%{HTTP_HOST}/$1.php [R]

robisz redirecta z httpS do samego http.
4. RTFM
Cytat
'redirect|R [=code]' (force redirect)

Prefix Substitution with http://thishost[:thisport]/ (which makes the new URL a URI) to force a external redirection. If no code is given, a HTTP response of 302 (MOVED TEMPORARILY) will be returned. If you want to use other response codes, simply specify the appropriate number or use one of the following symbolic names: temp (default), permanent, seeother. Use this for rules to canonicalize the URL and return it to the client - to translate ``/~'' into ``/u/'', or to always append a slash to /u/user, etc.
Note: When you use this flag, make sure that the substitution field is a valid URL! Otherwise, you will be redirecting to an invalid location. Remember that this flag on its own will only prepend http://thishost[:thisport]/ to the URL, and rewriting will continue. Usually, you will want to stop rewriting at this point, and redirect immediately. To stop rewriting, you should add the 'L' flag.

While this is typically used for redirects, any valid status code can be given here. If the status code is outside the redirect range (300-399), then the Substitution string is dropped and rewriting is stopped as if the L flag was used.

wykona ci: header( "Location: ....php" ) => czyli wykona kolejny request do web serwera => czyli zmieni URL w przegladarce
a

Kod
RewriteRule ^([a-z]+)$ http://%{HTTP_HOST}/$1.php [R]


oznacza przeciez: dopisz ".php" do request urla i przenies sie na http bez "S"
redman2
Troszkę nie do końca. Dobra, spróbuję z innej beczki.

Mam serwis, w którym występują takie reguły mod-rewrite (na przykladzie)

Kod
         http:// domena/nazwa.php?query => http://domena/nazwa?query
         http://domena/nazwa_nazwa2.php => http://domena/nazwa/nazwa2?query
         http://domena/nazwa_nazwa2_nazwa3.php => http://domena/nazwa/nazwa2/nazwa3?query

Dla kilku "nazw" muszę zastosować zabezpieczenie https, np:

Kod
       http://domena/form_pl.php =>  https://domena/form/pl


Rozwiązałem to w następujący sposób:

Kod
       RewriteCond %{HTTPS} !^on$
       RewriteCond %{REQUEST_URI} ^/(form|kontakt|rejestruj|haslo|admin) [NC]
       RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301]

RewriteRule ^([a-z]+)/?$ /$1.php [L,QSA]
      
       RewriteRule ^([a-z]+)/+([a-z0-9]+)/?$ /$1_$2.php [L,QSA]
      
       RewriteRule ^([a-z]+)/+([a-z0-9]+)/+([a-z]+)/?$ /$1_$2_$3.php [L,QSA]


Problem pojawia się przy powrocie z zabezpieczonych stron do stron niezabezpieczonych :

Kod
       RewriteCond %{HTTPS} !^on$
       RewriteCond %{REQUEST_URI} ^/(form|kontakt|rejestruj|haslo|admin) [NC]
       RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
      
       RewriteCond %{HTTPS} ^on$
       RewriteCond %{REQUEST_URI} !^/(form|kontakt|rejestruj|haslo|admin) [NC]
       RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
       RewriteRule ^([a-z]+)/?$ /$1.php [L,QSA]
      
   RewriteRule ^([a-z]+)/?$ /$1.php [L,QSA]
  
       RewriteRule ^([a-z]+)/+([a-z0-9]+)/?$ /$1_$2.php [L,QSA]
      
       RewriteRule ^([a-z]+)/+([a-z0-9]+)/+([a-z]+)/?$ /$1_$2_$3.php [L,QSA]


Przejście to wykonuje się poprawnie, ale z kolei występuje błąd weryfikacji certyfikatu.
I tak np. Firefox, dla zabezpieczonych stron robi przekierowanie na https, ale nie weryfikuje tego poprawnie, pokazując bląd:
Ta witryna nie dostarcza informacji na temat swej tożsamości

a IE z kolei nie wyświetla żadnego błędu a tym bardziej kłódki.

I co z tym zrobić questionmark.gif
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.