Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] $_GET i przyjazne URLe
Forum PHP.pl > Forum > Przedszkole
devbazy
Jako że mój poprzedni temat, który próbowałem bezskutecznie powołać do "życia" - przepadł w niepamięć, postanowiłem założyć nowy i ponownie spróbować się poradzić w pewnej kwestii.

Otóż mój problem przedstawia się następująco. Chciałem zastosować pewną regułkę w pliku .htaccess, by URL wyglądał nieco lepiej, ale niestety wygląda na to, że po wykonaniu tej czynności - tablica $_GET nie otrzymuje żadnej wartości (bez tej regułki wszystko działa bez problemu).

Wygląda to mniej więcej tak:

Dana osoba wchodzi na stronę: www.dana-strona.pl/panel/informacje/

  1. if($_SESSION['logged']) // jakiś warunek na sprawdzenie czy user jest zalogowany
  2. {
  3. //jak jest zalogowany to pozostaje na tej stronie
  4. }
  5. else {
  6. //a jak nie to wywala go do logowania
  7. header("location: www.dana-strona.pl/logowanie/?next=/panel/info/");
  8. }


Logujemy się...

  1. 1.
  2. if (user i hasło jest dobre) // logujemy sie i jest ok
  3. 2.
  4. {
  5. 3.
  6. if(isset($_GET['next'])){ //jest ustawione przekierowanie do którego ma wrócić user
  7. 4.
  8. header("location: www.dana-strona.pl".$_GET['next']); //powinno przejść na stronę: www.dana-strona.pl/panel/info/ - jednak wygląda na to, że $_GET niczego nie otrzymuje, bowiem w tym momencie nie wykonuje się owa instrukcja
  9. 5.
  10. 6.
  11. }
  12. 7.
  13. // tu coś się robi jak user zalogował się, ale nie przyszedł z żadnej strony
  14. 8.
  15. }
  16. 9.
  17. else {
  18. 10.
  19. // nie zalogował się poprawanie
  20. 11.
  21. }


Tak to wygląda w pliku .htaccess

  1. RewriteRule ^logowanie/?next=/([^-]+)/?$ ?strona=logowanie&next=$1 [L]


Liczę na jakieś wskazówki. Wiem, że mogłem namieszać. Kombinuje już z tym dłuższy czas i nie mogę wymyślić jakiegoś sensownego rozwiązania. Mam nadzieję, że przy Waszej pomocy sobie z tym poradzę.
Fifi209
Chcesz link np.

http://domena.pl/logowanie/

to robisz coś na wzór:
Kod
RewriteEngine On
RewriteRule ^[a-z]+/$ index.php?action=$1


i w index.php masz w $_GET['action'] to co chcesz.

To taki przyspieszony kurs. haha.gif
devbazy
Chyba nie bardzo zrozumiałeś o co mi chodzi, fifi209. Nie wiem czy w ogóle czytałeś mój pierwszy post, czy tylko spojrzałeś na nazwę tematu. Absolutnie nie mam żadnych problemów z tworzeniem regułek dla innych przykładów, wyjątkiem jest ten - podany wyżej. Po prostu, gdy dajmy na to - url wygląda tak: index.php?strona=logowanie&next=informacje - to wszystko działa jak należy, $_GET['next'] pobiera wartość, czyli "informacje". Jednak gdy już wprowadzę zmiany - widoczne wyżej, zaczyna pojawiać się problem.
Fifi209
Faktycznie, chyba byłem zaspany. Nie lepiej zobaczyć co masz w $_SERVER ? smile.gif
erix
A nie chodzi Ci przypadkiem o flagę [QSA] dla RewriteRule? winksmiley.jpg
devbazy
Cytat
Nie lepiej zobaczyć co masz w $_SERVER ?


Sprawdziłem, podczas próby logowania (po przekierowaniu z danej strony) wyświetla się: Array
erix
A co masz po var_dump na tej zmiennej?

Włącz myślenie.
devbazy
Cytat(erix @ 10.11.2009, 14:28:05 ) *
A nie chodzi Ci przypadkiem o flagę [QSA] dla RewriteRule? winksmiley.jpg


Tego też próbowałem, ale bez skutku.

Cytat(erix @ 10.11.2009, 14:32:28 ) *
A co masz po var_dump na tej zmiennej?


  1. ["SERVER_NAME"]=> string(9) "localhost"
  2. ["SERVER_ADDR"]=> string(9) "127.0.0.1"
  3. ["SERVER_PORT"]=> string(2) "80"
  4. ["REMOTE_ADDR"]=> string(9) "127.0.0.1"
  5. ["DOCUMENT_ROOT"]=> string(15) "C:/xampp/htdocs"
  6. ["SERVER_ADMIN"]=> string(15) "admin@localhost"
  7. ["SCRIPT_FILENAME"]=> string(33) "C:/xampp/htdocs/cms/index.php"
  8. ["REMOTE_PORT"]=> string(4) "2149"
  9. ["REDIRECT_QUERY_STRING"]=> string(10) "strona=logowanie"
  10. ["REDIRECT_URL"]=> string(17) "/cms/zaloguj/"
  11. ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1"
  12. ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1"
  13. ["REQUEST_METHOD"]=> string(4) "POST"
  14. ["QUERY_STRING"]=> string(10) "strona=logowanie"
  15. ["REQUEST_URI"]=> string(40) "/cms/zaloguj/?next=/panel/info/"
  16. ["SCRIPT_NAME"]=> string(18) "/cms/index.php" ["PHP_SELF"]=> string(18) "/cms/index.php"
  17. ["REQUEST_TIME"]=> int(1257861858) ["argv"]=> array(1) { [0]=> string(10) "strona=logowanie" } ["argc"]=> int(1) }


Nie jestem pewien, ale może faktycznie coś jest nie tak z tą regułką:

  1. RewriteRule ^logowanie/?next=/([^-]+)/?$ ?strona=logowanie&next=$1 [L]


Być może popełniłem jakiś błąd - dla mnie niezauważalny.

-----

Nie jestem do końca pewien dlaczego, ale problem stwarzał pytajnik, który znajdował się przed "next" w podanej wcześniej regułce.
Fifi209
Wystarczyło poczytać.
http://php.net/manual/en/regexp.reference.meta.php
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.