Ukrywanie parametrow strony w adresie url

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
splatch
Nowy
Nowy
Posty: 36
Rejestracja: śr gru 04, 2002 7:05 pm
Lokalizacja: Bydgoszcz/Brodnica
Kontakt:

Ukrywanie parametrow strony w adresie url

Post autor: splatch »

Hej!

Mam problem - chciałbym na swojej stronie mieć coś takiego jak jest na webiside - mianowicie zamiast news.php?id=1 coś takiego news/451. Wiem tylko że plik news musi obslugiwac całość. Próbowałem różnych sposobów. Mogę wpisać news/ ale nie moge news/4 bo nie ma takigo katalogu.
Ostatnio zmieniony pn lut 13, 2006 8:33 am przez splatch, łącznie zmieniany 1 raz.
Krzysztof Aszkiełowicz
Zaczyna działać
Zaczyna działać
Posty: 458
Rejestracja: pn maja 26, 2003 9:29 pm
Lokalizacja: Warszawa
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: Krzysztof Aszkiełowicz »

poczytaj o module_rewrite (Apache) 8)
splatch
Nowy
Nowy
Posty: 36
Rejestracja: śr gru 04, 2002 7:05 pm
Lokalizacja: Bydgoszcz/Brodnica
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: splatch »

Czytałem, właśnie na jego podstawie coś tam kombinowałem ale jako, że nie znam zbytnio angielskiego to mi to nie idzie :(. Gdybym miał jakiś pomysł to bym tu nie pisał :).
Mevius
Nowy
Nowy
Posty: 99
Rejestracja: czw wrz 11, 2003 11:27 am
Lokalizacja: Piła
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: Mevius »

mam podobny problem...
tj. znalazłem na php.pl artykuł o tym, ale coś nie mogę go zrozumieć i mi to nie działa - może któryś z redaktorów (czytelników) webinside by to wyjaśnił jakoś przejrzyście?

Art na PHP.pl: http://php.pl/index.php/phppl/artyku_y/ ... jazne_urle
Krzysztof Aszkiełowicz
Zaczyna działać
Zaczyna działać
Posty: 458
Rejestracja: pn maja 26, 2003 9:29 pm
Lokalizacja: Warszawa
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: Krzysztof Aszkiełowicz »

Dla mnie te 2 sposoby opisane na php.pl nie są do końca zadowalające.

Nie śmiem się równać redaktorom z PHP.pl, ani podważać ich umiejętnosći, ale nad opisem rewrite'a pomyślimy, może coś tam zklepię 8) :lol:

Pierwszy przykład z PATH_INFO działa, moze dajesz zamiast index.php samo index ?

Drugi też śmiga bez zarzutów

Nie wiem w czym problem, moze masz ten skrypt na darmowym serwerze, albo zła konfiguracja tego serwera?
Mevius
Nowy
Nowy
Posty: 99
Rejestracja: czw wrz 11, 2003 11:27 am
Lokalizacja: Piła
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: Mevius »

server mam na hdd Apache 2.0.49, PHP 4.3.5, w standardowej konfiguracji

Prędzej nie umiem tego zrobić :) Może napisz tutaj łądnie w punktach jak dla totalnej lamy jak to zrobić bosobien ie mogę poradzić :evil:
Wojciech Kocjan
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: sob gru 14, 2002 10:51 am

Re: Ukrywanie parametrow strony w adresie url

Post autor: Wojciech Kocjan »

Mevius
Nowy
Nowy
Posty: 99
Rejestracja: czw wrz 11, 2003 11:27 am
Lokalizacja: Piła
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: Mevius »

też doopa :P A mókłbyś jakąs gotową strukturę tego spakować i dać tutaj link? Tak żebym mókł to wgrać i żeby chodziło - to to sobie jakoś przeanalizuje....
Wojciech Kocjan
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: sob gru 14, 2002 10:51 am

Re: Ukrywanie parametrow strony w adresie url

Post autor: Wojciech Kocjan »

Przeciez tam masz gotowa strukture, do tego wszystko wyjasnione prostym jezykiem! Wez to przeczytaj jeszcze raz, pobaw sie przez chwile tym i zajarzysz. To nie ma tak, ze spojrzysz i od razu wszystko wiesz. Pobaw sie tym kodem, poedytuj, a nie pisz takich postow na forum.. Naprawde nie rozumiem, wszystko jest tam na tacy podane (w koncu FAQ), wystarczy odrobine wlasnych checi i spokojnie mozna zrozumiec o co chodzi.
splatch
Nowy
Nowy
Posty: 36
Rejestracja: śr gru 04, 2002 7:05 pm
Lokalizacja: Bydgoszcz/Brodnica
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: splatch »

Udało mi się to zrobić :).
plik .htaccess

Kod: Zaznacz cały

RewriteEngine On
RewriteRule /a/news/(.*?) /a/news?id=$1

<files news>
// plik wykonywalny php
</files>
Przykład działa dla pliku np. localhost/a/news lub lala/a/news - jeśli coś ma być w katalogu głównym wystarczy usunąć /a z początku - żeby było:

Kod: Zaznacz cały

RewriteRule /news/(.*?) /news?id=$1
Plik news
[php]<?php
echo $_SERVER['PHP_SELF'] ."<br>";
echo $_SERVER['PATH_INFO'] ."<br>";
?>[/php]

W ten sposób wszystkie dane wystepujace po news/ sa przypisane do zmiennej $_GET['id']. W krótce przedstawię bardziej rozbudowany przykłąd :).

(a te php.pl sie strasznie wlecze).
Ostatnio zmieniony pn lut 13, 2006 8:34 am przez splatch, łącznie zmieniany 1 raz.
splatch
Nowy
Nowy
Posty: 36
Rejestracja: śr gru 04, 2002 7:05 pm
Lokalizacja: Bydgoszcz/Brodnica
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: splatch »

Oto całość kodu, który znajduje się w pliku .htaccess. Pierwsza linia włącza moduł rewrite (musi on być wcześniej załadowany). Linia druga określa 'bazę', czyli początek adresu url. W tym przypadku, że plik news leży w katalogu głównym jest to tylko '/'. Należy pamiętać że dyrektywa RewriteBase tyczy się tylko pierwszej części wzoru, a nie obydwu. W drugiej części trzeba podać całość.

Kod: Zaznacz cały

RewriteEngine On
RewriteBase /
RewriteRule ^news/(.*?)$ /news?id=$1

# tutaj zbędne dyrektywy - wycięte :)

<Files news> 
    ForceType application/x-httpd-php
</Files>
Dyrektywa <Files news> powoduje, że plik news jest traktowany jako plik php. Jeśli tego nie będzie nie da rady za pomocą php tego wyciągnąć :).

Teraz część skryptowa.
[php]<?php
$dane = str_replace( $_SERVER['PATH_INFO'] .'/', '', $_SERVER['REQUEST_URI'] ); // obcinamy pierwszy slash

if( strstr( $dane, '/') )
{
$tablica = explode( '/', $dane );
for( $x = 0; $x < sizeof( $tablica ); $x++ )
{
$_URL[ $tablica[ $x ] ] = $tablica[ $x+1 ];
$x++;
}
for( $x = 0; $x < sizeof( $tablica ); $x++ )
{
$_URL[ $x ] = $tablica[ $x ];
}
}
else
{
$_URL = $dane;
}
var_dump( $_URL );
?> [/php]
Pierwsza pętla for powoduje, że adres zapisany w postaci news/id/341/language/pl jest przekształcany w tablicę asocjacyjną o struktórze

Kod: Zaznacz cały

	'id' => '341'
	'language' => 'pl'
Druga pętła tworzy tablicę z kluczami numerycznymi o struktórze

Kod: Zaznacz cały

	0 => 'id'
	1 => '341'
	2 => 'language'
	3 => 'pl'
Jeśli adres jest prosty - w postaci news/341 to zmienna $_URL przyjmuje wartość 341.

Całość adresu url po pierwszym slash'u jest zawarta w tablicy $_GET - na przykład dla wcześniejszej konfiguracji może ona wyglądać tak:

Kod: Zaznacz cały

$_GET["id"] id/341/language/pl
Mam nadzieję, że komuś pomogłem/pomogę nie tylko sobie :). Jeśli są jakieś pytania to piszcie najlepiej na mail'a, postaram się odpowiedzieć bo załapałem o co chodzi <[email protected]>.
Ostatnio zmieniony pn lut 13, 2006 8:35 am przez splatch, łącznie zmieniany 1 raz.
bartekp
Posty: 1
Rejestracja: pt kwie 02, 2004 1:20 am

Re: Ukrywanie parametrow strony w adresie url

Post autor: bartekp »

Witam.

A jak ocenicie takie rozwiazanie:
[php]<?php
$str=explode('/', $QUERY_STRING);

$id1=$str[0];
$id2=$str[1];
$id3=$str[2];

// oczywiscie nie trzeba przypisywac tej tablicy do zmiennych

?>[/php]
co prawda w adresie dalej widoczna jest nazwa pliku ale zamiast linku np.:
http://adres.pl/index.php?id1=wartosc1& ... 2=wartosc3

mamy:
http://adres.pl/index.php?wartosc1/wartosc2/wartosc3
splatch
Nowy
Nowy
Posty: 36
Rejestracja: śr gru 04, 2002 7:05 pm
Lokalizacja: Bydgoszcz/Brodnica
Kontakt:

Re: Ukrywanie parametrow strony w adresie url

Post autor: splatch »

bartekp pisze:co prawda w adresie dalej widoczna jest nazwa pliku ale zamiast linku np.:
http://adres.pl/index.php?id1=wartosc1& ... 2=wartosc3

mamy:
http://adres.pl/index.php?wartosc1/wartosc2/wartosc3
Twój sposób nie wymaga mieszania w konfiguracji serwera ani obsługi plików htaccess :).
ODPOWIEDZ