06 maja 2010
Czas najwyższy na jakiś wpis z konkretnymi poradami bo ostatnio jest tutaj z tym kiepsko...
Jak wiemy (albo i nie
) autoryzacja w PHP działa tylko wtedy gdy PHP jest zainstalowane jako moduł Apache (o innych serwerach dzisiaj pisać nie będę). Tak przynajmniej oficjalnie głosi dokumentacja. Jest jednak światełko w tunelu dla tych, którzy mają hosting z PHP postawionym jako CGI.
Poniżej opisane jest jedno z rozwiązań. Nie ma pewności, że będzie u Ciebie działało, zależy to od możliwości/ustawień Twojego konta hostingowego. U mnie działa
W komentarzach do wyżej podlinkowanej dokumentacji znajdziesz inne rozwiązania więc próbuj do skutku.
Pierwszy wymagany krok to ustawienie w pliku .htaccess odpowiedniej regułki. Wygląda ona tak:
CODE:
-
RewriteEngine on
-
RewriteRule \.php$ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
W ten sposób ustawiamy w PHP specjalną wartość w tablicy $_SERVER z kluczem HTTP_AUTHORIZATION i danymi autoryzacyjnymi. Teraz wystarczy w PHP odczytać to co zaserwuje nam Apache takim kodem:
PHP:
-
if(isset($_SERVER['HTTP_AUTHORIZATION']) AND
$_SERVER['HTTP_AUTHORIZATION'] !=
'') {
-
-
}
Przemyśl dokładnie gdzie to wstawić w swój kod. Dzięki takiej sztuczce PHP dostanie dwie wartości, Twój login i hasło, tak jakbyś korzystał z modułu Apache.
Gdyby powyższe nie działało to można spróbować jeszcze takiego kodu w .htaccess (zamiennie do powyższego):
CODE:
-
SetEnvIf Authorization "^(Basic .+)$" HTTP_AUTHORIZATION=$1
U siebie akurat stosuje ten drugi kod bo to było pierwsze rozwiązanie na które natrafiłem. Jednak na większości serwerów bardziej dostępny jest mod_rewrite niż mod_setenvif dlatego wybrałem taką kolejność podawanych rozwiązań.
30 stycznia 2009
Na temat przekierowań 301 napisałem już sporo (tu i tu) ale tym razem mam coś bardzo smakowitego
Przekierowania 301 najczęściej używa się gdy chcemy aby nasza strona zawsze pojawiała się z lub bez "www". Oczywiście podawałem już rozwiązania tego problemu w .htaccess (patrz linki wyżej) ale miały one jedną wadę: trzeba było wpisać adres swojej witryny. A może da się prościej? Czytaj dalej »
08 listopada 2008
Standardem stają się ładne, oparte o .htaccess, adresy stron internetowych, tworzone według zasad SEO (Search Engine Optimization - Pozycjonowanie stron internetowych). Przykład to chociażby ten blog. Adres tego wpisu wygląda tak:
CODE:
-
http://www.tarnaski.eu/blog/generowanie-bezpiecznych-adresow-www-dla-seo
Ale to tylko "przykrywka". Sprytny sposób ukrycia prawdziwego adresu, który prezentuje się tak:
CODE:
-
http://www.tarnaski.eu/blog/?p=458
Który link wygląda ładniej?
No właśnie... Wyszukiwarki typu google też wolą ten pierwszy
Jednak aby mieć takie adresy trzeba spełnić kilka warunków. Potrzebujemy między innymi funkcji, która zamieni dowolny ciąg znaków na coś co będzie bezpieczne i akceptowalne przez wszystkie wyszukiwarki i przeglądarki Internetowe. Czyli coś co zamieni "Generowanie bezpiecznych adresów www dla SEO" na "generowanie-bezpiecznych-adresow-www-dla-seo". I tym właśnie się zajmiemy
Czytaj dalej »
07 czerwca 2008
Dzisiaj ktoś prosił mnie o pomoc w związku z moim wpisem Przekierowanie 301. Postanowiłem więc uzupełnić informacje
To będzie krótka notka
Może zdarzyć się, że mamy dwie domeny, obie kierują na tą samą stronę jednak nie chcemy aby strona była w dwóch kopiach pod dwoma adresami tylko żeby jeden adres przekierowywał na drugi. Oto gotowa reguła:
CODE:
-
RewriteEngine On
-
RewriteCond %{HTTP_HOST} ^(www\.)?domena1.pl(.*) [NC]
-
RewriteRule ^(.*)$ http://www.domena2.pl/$1 [R=301,L]
Powyższy kod umieszczony w pliku .htaccess przekieruje wszystko co jest pod domena1.pl na domena2.pl
Bez względu na to czy dodamy przedrostek www.
Wersja dla PHP wygląda tak:
PHP:
-
<?php
-
if($_SERVER['HTTP_HOST']=='domena1.pl' || $_SERVER['HTTP_HOST']=='www.domena1.pl')
-
{
-
header("HTTP/1.1 301 Moved Permanently");
-
header("Location: http://www.domena2.pl".
$_SERVER['REQUEST_URI']);
-
-
-
}
-
?>
Cała sprawa polega na tym, że trzeba sprawdzić jaka domena jest wywołana ponieważ obie domeny kierują na te same pliki. Gdybyśmy wsadzili zwykłe przekierowanie z poprzedniego wpisu na temat przekierowań 301 to po wejściu na domena2.pl przekierowywałoby nas na... domena2.pl
Wszystko by się zapętliło i mielibyśmy błąd. Zresztą domena1.pl też by nie działała bo najpierw by nas przekierowało na domena2.pl a potem znowu zapętlenie.
Uwaga! (30.01.2008)
Jeżeli interesuje Cię przekierowanie w .htaccess z "bez www" na "z www" lub odwrotnie to nie pożałujesz jeżeli przeczytasz mój wpis na temat uniwersalnego przekierowania 301.
22 kwietnia 2008
Zdaję sobie sprawę, że informacje o przekierowaniu 301 to nic nowego. Ale nadal niektórzy szukają odpowiedzi na pytanie "Co to jest?" więc zamieszczam krótką ściągawkę.
"Przekierowanie 301: Moved Permanently" przydaje się do pozycjonowania stron Internetowych. Służy ono do przekierowania z jednego adresu na drugi. Niby nic nadzwyczajnego ale... To konkretne przekierowanie ma pewne zalety. Otóż przenosi ono "siłę" jednego adresu na drugi. Czyli przekazywany jest PageRank adresu, jego pozycja w wyszukiwarkach na wybrane frazy itd. Czytaj dalej »
07 kwietnia 2008
Mam specyficzną potrzebę. Piszę sobie oprogramowanie typu Multisite CMS. Od zwykłego CMS'a różni się to tym, że na jednym serwerze, na jednych plikach i jednej bazie danych mogę postawić nieskończenie wiele stron
Bardzo to wygodne chociaż skomplikowane przy projektowaniu. Ale ma ogromną przewagę nad innymi CMS'ami bo przy stawianiu kolejnych stron nie muszę za każdym razem instalować kolejnych plików, tworzyć kolejnych tabel w bazie danych itd.
Muszę pamiętać również o bezpieczeństwie. Z oprogramowania będą korzystały różne osoby. Z jednej strony, muszą mieć bardzo szerokie możliwości zmian i dodawania elementów do swoich witryn. Z drugiej, nie mogą mieć dostępu do PHP, nie mogą poznać kodu źródłowego, nie mogą mieć możliwości żadnych zmian silnika oprogramowania itd.
Każda strona ma swój osobny katalog w którym można zamieszczać potrzebne pliki np. grafikę, skrypty JavaScript itd. Dostęp do tego katalogu będzie poprzez panel administratora. Ale co zrobić aby nikt mi tam nie wsadził podejrzanych skryptów, które mogą narozrabiać na serwerze?
Znalazłem kilka sposobów ale zależało mi na tym, żeby zawartość plików PHP po prostu się wyświetlała w przeglądarce a większość rozwiązań powodowała rozpoczęcie ściągania pliku na dysk.
Co zrobić? Utworzyć plik .htaccess z taką zawartością:
AddType text/plain .php .php3 .php4 .php5 .inc .phtml .cgi .pl
Oczywiście listę rozszerzeń można dowolnie modyfikować. Ta linijka spowoduje, że zawartość wszystkich plików o wypisanych rozszerzeniach będzie traktowana jak zwykły tekst. Wszystko działa począwszy od katalogu w którym znajduje się plik .htaccess oraz głębiej w strukturze katalogów. Pamiętajcie o tym bo w skrajnym wypadku nasz kochany użytkownik usunie plik .htaccess i będzie robił co mu się podoba