Ukrywanie parametrow strony w adresie url
-
splatch
- Nowy

- Posty: 36
- Rejestracja: śr gru 04, 2002 7:05 pm
- Lokalizacja: Bydgoszcz/Brodnica
- Kontakt:
Ukrywanie parametrow strony w adresie url
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.
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ć

- Posty: 458
- Rejestracja: pn maja 26, 2003 9:29 pm
- Lokalizacja: Warszawa
- Kontakt:
Re: Ukrywanie parametrow strony w adresie url
poczytaj o module_rewrite (Apache) 
-
splatch
- Nowy

- Posty: 36
- Rejestracja: śr gru 04, 2002 7:05 pm
- Lokalizacja: Bydgoszcz/Brodnica
- Kontakt:
Re: Ukrywanie parametrow strony w adresie url
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ł
.
Re: Ukrywanie parametrow strony w adresie url
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
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ć

- Posty: 458
- Rejestracja: pn maja 26, 2003 9:29 pm
- Lokalizacja: Warszawa
- Kontakt:
Re: Ukrywanie parametrow strony w adresie url
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ę

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?
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ę
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?
Re: Ukrywanie parametrow strony w adresie url
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ć 
Prędzej nie umiem tego zrobić
-
Wojciech Kocjan
- Zaczyna działać

- Posty: 427
- Rejestracja: sob gru 14, 2002 10:51 am
Re: Ukrywanie parametrow strony w adresie url
też doopa
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ć

- Posty: 427
- Rejestracja: sob gru 14, 2002 10:51 am
Re: Ukrywanie parametrow strony w adresie url
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

- Posty: 36
- Rejestracja: śr gru 04, 2002 7:05 pm
- Lokalizacja: Bydgoszcz/Brodnica
- Kontakt:
Re: Ukrywanie parametrow strony w adresie url
Udało mi się to zrobić
.
plik .htaccess
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:
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).
plik .htaccess
Kod: Zaznacz cały
RewriteEngine On
RewriteRule /a/news/(.*?) /a/news?id=$1
<files news>
// plik wykonywalny php
</files>
Kod: Zaznacz cały
RewriteRule /news/(.*?) /news?id=$1[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

- Posty: 36
- Rejestracja: śr gru 04, 2002 7:05 pm
- Lokalizacja: Bydgoszcz/Brodnica
- Kontakt:
Re: Ukrywanie parametrow strony w adresie url
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ść.
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
Druga pętła tworzy tablicę z kluczami numerycznymi o struktórze
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:
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]>.
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>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'Kod: Zaznacz cały
0 => 'id'
1 => '341'
2 => 'language'
3 => 'pl'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
Ostatnio zmieniony pn lut 13, 2006 8:35 am przez splatch, łącznie zmieniany 1 raz.
Re: Ukrywanie parametrow strony w adresie url
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
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

- Posty: 36
- Rejestracja: śr gru 04, 2002 7:05 pm
- Lokalizacja: Bydgoszcz/Brodnica
- Kontakt:
Re: Ukrywanie parametrow strony w adresie url
Twój sposób nie wymaga mieszania w konfiguracji serwera ani obsługi plików htaccessbartekp 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