Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]mod_rewrite - prosba o pomoc
siemieng
post
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


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 (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Kszyhuu
post
Post #2





Grupa: Zarejestrowani
Postów: 157
Pomógł: 32
Dołączył: 24.08.2009

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


http://www.php.rk.edu.pl/w/p/modrewrite-krotkie-urle/
Go to the top of the page
+Quote Post
siemieng
post
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


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 (IMG:style_emoticons/default/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?(IMG:style_emoticons/default/questionmark.gif) ?

Ten post edytował siemieng 6.09.2009, 14:39:27
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


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

Ten post edytował siemieng 6.09.2009, 19:41:11
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Napisałem już raz, zalinkuję:
http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html
Go to the top of the page
+Quote Post
siemieng
post
Post #7





Grupa: Zarejestrowani
Postów: 101
Pomógł: 7
Dołączył: 16.01.2007

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


"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:)
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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.
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: 24.08.2025 - 18:33