Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przekierowanie tylko niektórych adresów
Forum PHP.pl > Forum > Serwery WWW > Apache
czachor
Witam,
chcę, żeby niektóre podstrony były dostępne tylko w połączeniu szyfrowanym (https).
Robię to tak:
Kod
Options +FollowSymlinks
RewriteEngine On

#SSL
RewriteCond %{HTTPS} !=on
RewriteRule "(rejestruj|login|zmien_haslo|profil)+" "https://%{HTTP_HOST}%{REQUEST_URI}" [R=301,L,NC]

#na koniec jeszcze nice URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*$ ?controller=$1&action=$2&$3=$4&$5=$6&$7=$8 [L,NC,NS]

To działa, czyli jak wklepię np. http://localhost/example.net/kontroler/rejestruj, zostanę przekierowany na https://...

Muszę jednak założyć, że użytkownik może wklepać https:// dla innych akcji, np. https://localhost/example.net/kontroler/non_ssl- to chcę przekierować z powrotem na http://... Z tym właśnie mam problem, próbuję m. in. tego:
Kod
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !(rejestruj|login|zmien_haslo|profil)+ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]

Skutek jest taki, że wszystkie adresy są przekierowywane na http:// (włącznie z tymi 'rejestruj' itd.), a dodatkowo te, które powinny być dostępne via https, są w postaci http://localhost/example.net?controller=ko...ction=rejestruj (a np. /non_ssl będzie już w "ładnej" postaci).

Nie bardzo wiem, gdzie robię błąd, dlatego będę wdzięczny za pomoc.

Pozwolę sobie na podbicie tematu - ciągle nie znalazłem rozwiązania, a sprawa trochę mnie ciśnie.
wookieb
Pytanie. Dlaczego nie możesz tego zrobić z poziomu php? ZNacznie łatwiej.
czachor
Tak tymczasowo zrobiłem, ale:
1) chciałbym poznać rozwiązanie dla własnej wiedzy,
2) kwestie takich i podobnych przekierowań chcę pozostawić w htaccess dla pewnego (niekoniecznie dobrego, ale zastanego) porządku (podobnie jak nice urls, które też mogą być via php).
erix
Cytat
Pozwolę sobie na podbicie tematu - ciągle nie znalazłem rozwiązania, a sprawa trochę mnie ciśnie.

Cały dzień na weekendzie klepałem, chyba jest to, co chcesz. ;]

http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html
czachor
Kawał dobrej roboty odwaliłeś.

Niestety u mnie dalej nie działa :/ Sam już nie wiem, w czym problem. Reguła przekierowywania na https działa, odwrotna już nie. Niżej mój kompletny htaccess. Przykładowy URL dla którego powinno być SSL: https://localhost/jakas_strona/kontroler/login/; bez SSL: http://localhost/jakas_strona/kontroler/no_ssl/
Oczywiście zadziała reguła, w której wypiszę wszystkie akcje, dla których SSL ma być wyłączone, ale tych jest bardzo dużo i sensowniej jest wypisać akcje, dla których SSL ma być włączone.
Kod
Options +FollowSymlinks
RewriteEngine On

#uniemożliwienie wykonywania metody TRACE
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]

#(www.)
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [r=301,NC,l]

#SSL
RewriteCond %{HTTPS} off
RewriteRule (rejestruj|login|login_proceed|logout|usun_konto|usun_konto_po|zmien_haslo|pr
fil|zapomniane_haslo|zapomniane_haslo_zmiana) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]

#poniższe nie działa; po włączeniu otrzymuję dla akcji "login" ciąg:
#http://localhost/jakas_strona/?controller=kontroler&action=login&=&=&=
#RewriteCond %{HTTPS} on
#RewriteRule !(rejestruj|login) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]

# Nice URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*([^/]*)/*$ ?controller=$1&action=$2&$3=$4&$5=$6&$7=$8 [L,NC,NS]

#PHP
php_flag magic_quotes_gpc off
php_flag session.use_trans_sid off
php_flag session.cookie_httponly on
php_value url_rewriter.tags a=href,area=href,frame=src,input=src,fieldset=
php_value session.cache_limiter nocache
php_value session.cache_expire 30000
php_value session.gc_maxlifetime 86400
php_value session.cookie_lifetime 0
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.