Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]mod_rewrite - prosba o pomoc
Forum PHP.pl > Forum > Przedszkole
siemieng
witam,

Mam problem z uzyskaniem efektu przyjaznych urli na home.pl, do tej proy bazowalem na $_SERVER['PATH_INFO'] oraz ForceType application/x-httpd-php w .htaccess, przez co omijalem mod_rewrite.

Niestety home.pl nie daje mozliwosci uzywania ForceType application/x-httpd-php sad.gif

Prosilbym o informacje czy sie da a jesli tak to jak mialby wygladac regula mod_rewrite do zamaskowania rozszerzenia .php w adresie url.

Czyli zeby wpisanie np:
http://domena.pl/sekcja/podsekcja1/....

podowowalo wczytanie danych z pliku sekcja.php
siemieng
mam jednak ciagle problem, poniewaz potrzebuje troszku bardziej skomplikowanych regul mod_rewrite :/

Obecnie mod_rewrite wykorzystuje do przekierwania na katalog /public/:
RewriteCond %{HTTP_HOST} ^(www\.)?domena\.pl$ [NC]
RewriteCond %{REQUEST_FILENAME} !/public/
RewriteRule ^(.*)$ /public/$1 [L]

Poniewaz jak pisalem wczesniej w home.pl nie mozna uzyc ForceType application/x-httpd-php, do nazw plikow stron bez rozszerzenia dodalem .php. Czyli teraz w kataogu /public/ posiadam np: dzial1.php, dzial2.php, ...

Dodanie reguly:
RewriteRule ^dzial1$ dzial1.php [L]
dziala, lecz uniemozliwia mi w pelni poprawne dzialanie strony, poniewaz calosc bazuje o dane pobrane z $_SERVER['PATH_INFO'], a z wykorzystaniem takiej reguly domena.pl/dzial1/poddzial1/poddzial2 wyrzuca blad braku pliku.

Do reguly dodalem
RewriteRule ^dzial1[0-9a-zA-Z_/]*$ dzial.php [L]
i teraz faktycznie po wpisaniu adresu domena.pl/dzial1/poddzial1/podzdzial2 w linku jest ok, nie ma bledu, lecz zmienna $_SERVER['PATH_INFO'] nie widzi tej czesci linku /poddzial1/poddzial2 sad.gif Jakiej reguly (regul) uzyc zeby dzialalo to w calosci, uwzgledniajac takze przekierowanie na katalog /public/ a takze mozliwosc istnienia danych przeslanych przez get w "czystej" postaci czyli bez zamiany z uzyciem moda?questionmark.gif?
erix
A nie możesz po prostu:
[APACHE] pobierz, plaintext
  1. RewriteCond...
  2. RewriteRule ^(.*?)$ index.php?q=$1 [L,QSA]
[APACHE] pobierz, plaintext

skoro chciałeś wszystko routować do jednego pliku?
siemieng
Nie wiem czy dobrze rozumie, ale rozwiazanie bazujace na jednym glownym pliku nie wchodzi w gre, poniewaz strona zbudowana jest w oparciu o rozne pliki stron, gdzie kazdy dzial glowny jest osobnym, fizycznym plikiem, dopiero poddzialy sa zmiennymi, np:
domena.pl/kontakt -> kontakt.php
domena.pl/artykuly/najnowsze -> artykuly.php, dopiero "najnowsze" jest wartoscia url, nie jest tez zmienna obslugiwana przez get, jest poprostu wartoscia, ktora jest pobierana z $_SERVER['PATH_INFO']

I teraz wlasnie nie potrafie sobie sam poradzic ze stworzeniem regul mod_rewrite, ktore by adres typu: domena.pl/artykuly/najnowsze - tlumaczyly na domena.pl/artykuly.php/najnowsze, uwzgledniajac dodatkowo przekierowanie do katalogu /public/ w ktorym to sa pliki stron
erix
Napisałem już raz, zalinkuję:
http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html
siemieng
"erix" dzieki wielkie za linka, poczytalem, wykorzystuje opisane w artykule metody, lecz chyba czegos dalej nie moge do konca zrozumiec:/

W katalogu, na ktory wskazuje domena dodalem pierwszy plik .htaccess z regulami mod_rewrite przekierowujacymi do katalogu /public/ gdzie sa pliki stron:
[APACHE] pobierz, plaintext
  1. RewriteEngine On
  2. RewriteCond %{HTTP_HOST} ^(www\.)?domena\.pl$ [NC]
  3. RewriteCond %{REQUEST_FILENAME} !/public/
  4. RewriteRule ^(.*)$ /public/$1 [L]
[APACHE] pobierz, plaintext


Drugi plik .htaccess umiescilem w katalogu /public/, gdzie znajduja sie pliki stron (index.php, dzial1.php, dzial2.php ....). I teraz chcac doprowadzic link do postaci domena.pl/dzial1/poddzial1/poddzial2/.... gdzie "dzial1" jest fizycznym plkiem reszta to wartosci url, dodalem regule:
[APACHE] pobierz, plaintext
  1. RewriteEngine On
  2. RewriteRule (dzial1)/(.+) $1.php/$2 [L]
  3. RewriteRule (dzial1) $1.php [L]
[APACHE] pobierz, plaintext


Samo wczytywanie stron z pominieciem ich rozszerzenia teraz niby smiga, lecz w skryptach php zmienna $_SERVER['PATH_INFO'] jest ciagle pusta:/ a jak pisalem wczesniej cala strona bazuje o dane pobrane z niej. I teraz nie wiem, czy PATH_INFO nie dzial z linkami przeksztalconymi przez mod_rewrite, czy ja cos zle robie. Usuniecie drugiego pliku .htaccess, tym samym doprowadzenie adresu do postaci domena.pl/dzial1.php/poddzial1/poddzial2/.... powoduje, ze PATH_INFO dziala ok:/ Prosze o pomoc, bo stracilem juz trochu czasu, ktoego akurat teraz nie mam:/ z gory dzieki:)
erix
Cytat
Samo wczytywanie stron z pominieciem ich rozszerzenia teraz niby smiga, lecz w skryptach php zmienna $_SERVER['PATH_INFO'] jest ciagle pusta:/

To zależy od konfiguracji serwera; sprawdziłem przed chwilą na devie i u mnie tez nie ma tego klucza w $_SERVER ;]

Spróbuj użyć innych kluczy z $_SERVER, np. REQUEST_URI, który IMHO będzie tu najlepszym wyjściem.
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.