Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] mod_rewrite problem z niceURL
Barcelona
post
Post #1





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
Necsord
post
Post #2





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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]


Ten post edytował Necsord 17.02.2012, 20:37:57
Go to the top of the page
+Quote Post
Barcelona
post
Post #3





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


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.  


Ten post edytował Barcelona 17.02.2012, 22:06:16
Go to the top of the page
+Quote Post
Necsord
post
Post #4





Grupa: Zarejestrowani
Postów: 189
Pomógł: 60
Dołączył: 5.10.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Gdzie masz ten widok.css ? Domyślam się, że obok index.php, więc daj "/" przed widok.css (/widok.css).

Ten post edytował Necsord 17.02.2012, 22:14:59
Go to the top of the page
+Quote Post
Barcelona
post
Post #5





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


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 :/

Ten post edytował Barcelona 18.02.2012, 13:18:12
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
Barcelona
post
Post #7





Grupa: Zarejestrowani
Postów: 322
Pomógł: 15
Dołączył: 29.01.2010

Ostrzeżenie: (0%)
-----


Znalazłem poradę w Twoich artykułach, posiedzę, poczytam. Zobaczę co wyjdzie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 09:46