Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] mod_rewrite problem z niceURL
Forum PHP.pl > Forum > Przedszkole
Barcelona
Witam, swoją stronę buduję na zasadzie linków index.php?strona=konto

Do takiego linku robię taki wpis w .htaccess

  1. RewriteRule ^(.+)\.html$ index.php?strona=$1 [L]


Dzięki temu uzyskuje efekt adres /konto.html

Problemem jest dalsza część kodu, kiedy mam taki link index.php?strona=konto&podstrona=wykaz

Próbuje taki wpis:

  1. RewriteRule ^(.+)/(.+)\.html$ index.php?strona=$1&podstrona=$2 [L]


Link powinien wyglądać w taki sposób:

/konto/wykaz.html

Jednak nie działa to tak jak należy. Gdzie robię błąd ?
Necsord
Zauważ że wszystkie możliwości regexp'a ^(.+)/(.+)\.html$ zawierają się w ^(.+)\.html$ ,a że przy tej drugiej (^(.+)\.html$) dałeś L (last rule) to dalej nie szuka.
Spróbuj zamienić kolejnością RewriteRules:
  1. RewriteRule ^(.+)/(.+)\.html$ index.php?strona=$1&podstrona=$2 [L]
  2. RewriteRule ^(.+)\.html$ index.php?strona=$1 [L]
Barcelona
OK, teraz wczytuje tą stronę co trzeba, jednak bez CSS ;/

Wklejam kod index.php, może on wyjaśni na jakiej zasadzie działa witryna

  1. <?
  2.  
  3. include('baza.php');
  4. include('kolorowanie.php'); //kolorowanie skladni w zaleznosci od wartosci
  5. $strona = $_GET['strona'];
  6. $podstrona = $_GET['podstrona'];
  7.  
  8. ?>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  10. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  11. <head>
  12. <meta>......</meta>
  13. <link rel="stylesheet" type="text/css" href="widok.css" media="screen,projection" />
  14. </head>
  15.  
  16. <body>
  17. <div id="naglowek">
  18. </div>
  19.  
  20. <div id="pojemnik">
  21. <div id="main">
  22. <?
  23. switch($strona)
  24. {
  25. case "": include("glowna.php"); break;
  26. case "kontakt": include("kontakt.php"); break;
  27. case "admin":
  28. switch($podstrona){
  29. case 'userzy': include("users.php"); break;
  30. }; break;
  31.  
  32. }
  33. ?>
  34. </div>
  35.  
  36. <div id="sidebar">
  37. </div>
  38.  
  39. <div id="footer">
  40. <p>Copyright ? 2011 <a href="index.html">-</a> ? <a href="#">kontakt</a></p>
  41. </div>
  42.  
  43. </div>
  44. </body>
  45. </html>
  46.  
Necsord
Gdzie masz ten widok.css ? Domyślam się, że obok index.php, więc daj "/" przed widok.css (/widok.css).
Barcelona
widok.css znajduje się w głównym katalogu. Dopisałem "/" przed widok.css i faktycznie poskutkowało. Jednak teraz zauważyłem kolejny problem. Nie wyświetlają się niektóre pliki graficzne i pewnie jest ten sam problem co był ze stylem css. Muszę teraz przelecieć wszystkie pliki i poprawiać cały kod tak żeby było "/".

Ok, to już mam, a teraz nie wiem jak zrobić, aby nie tworzyć w htaccess kolejnych wpisów dla konkretnych warunków, które pobieram z GET

Np. mam link index.php?strona=raport&podstrona=tygodniowy

I dla niego odpowiada ten konkretny kawałek kodu:

  1. RewriteRule ^(.+)/(.+)\.html$ index.php?strona=$1&podstrona=$2 [L]


Ale jeżeli już mam kolejny warunek

index.php?strona=raport&podstrona=tygodniowy&week=07 to muszę robić kolejny wpis do htaccess

  1. RewriteRule ^(.+)/(.+)/(.+)\.html$ index.php?strona=$1&podstrona=$2&week=$3 [L]


Nie było by problemem gdyby chodziło o jeden warunek, ale w moim przypadku jest ich dużo, od &id po &data. Dla każdego takiego warunku muszę tworzyć osobną linijkę kodu? No i jest problem, ponieważ nie pobiera mi wartości z GET :/

Podbijam, bo temat mam wciąż rozgrzebany :/
nospor
I właśnie dlatego ja zrezygnowałem z robienie ładnych urli w htaccess i przerzuciłem tę robotę na PHP, w którym jesteś w stanie bez większego problemu obsłużyć wszystko z masą róznych dodatkowych parametrów.
Barcelona
Znalazłem poradę w Twoich artykułach, posiedzę, poczytam. Zobaczę co wyjdzie smile.gif
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.