Skocz do zawartości

Reguły Mod_rewrite


marcini

Rekomendowane odpowiedzi

Witam!

 

Prosze o pomoc w napisaniu reguly mod_rewrite.

 

Chodzi o to, zeby link w stylu:

http://domena.pl/index.php/parametr1/parametr2/parametr3

mogl byc wywolywany jako:

http://domena.pl/parametr1/parametr2/parametr3

 

Dodatkowo, musi to byc kompatybilne z tradycyjnym sposobem wywolywania strony:

http://domena.pl/index.php?zm1=parametr1&a...p;zm3=parametr3

 

Wykombinowalem cos takiego:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^([^-]+)/([^-]+)/([^-]+)/([^-]+)$ index.php?module=$1&action=$2&$3=$4 [L,NC,NS]
RewriteRule ^([^-]+)/([^-]+)/([^-]+)/([^-]+)/([^-]+)/([^-]+)$ index.php?module=$1&action=$2&$3=$4&$5=$6 [L,NC,NS]
RewriteRule ^([^-]+)/([^-]+)/([^-]+)/([^-]+)/([^-]+)/([^-]+)/([^-]+)/([^-]+)$ index.php?module=$1&action=$2&$3=$4&$5=$6&$7=$8 [L,NC,NS]

Pierwsze 2 parametry maja stale nazwy, a pozostale sa podawane jako zmienna/wartosc.

Dziala, ale tylko jesli mam 3 parametry:

http://domena.pl/wartosc1/wartosc2/zm3/wartosc3

Jak doloze nastepna zmienna:

http://domena.pl/wartosc1/wartosc2/zm3/wartosc3/zm4/wartosc4

to mam pusta strone.

A wg mnie kolejne parametry powinny zalatwic kolejne regulki.

 

Co mam zmienic?

Odnośnik do komentarza
Udostępnij na innych stronach

OK, jak zamienie kolejnosc i dluzsze linie dam na poczatek, to wszystko sie wyswietla jak podaje adresy bez index.php:

http://domena.pl/parametr1/parametr2/zm3/parametr3

Teraz mam tak:

RewriteCond %{REQUEST_URI} !\.

RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4&$5=$6 [L]

RewriteRule (.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4 [L]

Ale pojawil sie inny problem: jak dodam index.php do linka:

http://domena.pl/index.php/parametr1/parametr2/zm3/parametr3

to mam pusta strone. A tak nie moze byc, bo serwis juz jakis czas istnieje i nie chce zeby sie stare linki do niego zdezaktualizowaly.

Myslalem ze RewriteCond to zalatwi, odrzucajac linki zawierajace kropke, ale jednak nie dziala.

 

Wiec, co mam jeszcze zmienic?

Odnośnik do komentarza
Udostępnij na innych stronach

To rozwiazuje problem z indexem, ale tylko dla malej ilosci parametrow.

 

To moze napisze po kolei, co sie dzieje przy regulach z poprzedniego posta.

Jak pisze:

RewriteRule (.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4 [L]

To dziala bez index.php, ale z indexem (czyli po staremu) nie dziala.

Wiec dodaje wczesniej:

RewriteCond %{REQUEST_URI} !\.

i zaczyna dzialac tez z indexem, bo index.php zawiera kropke.

Ale dlaczego, jesli przed pierwsza regula dodam nastepna:

RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4&$5=$6 [L]

to linki z index.php przestaja dzialac?

Przeciez nadal chyba powinno wykluczac linki z kropka?

Odnośnik do komentarza
Udostępnij na innych stronach

Kazda strone serwisu mozna wyswietlic, podajac adres:

http://domena.pl/index.php?module=wartosc1...mp;zm3=wartosc3

lub

http://domena.pl/index.php?module=wartosc1...mp;zm4=wartosc4

 

Serwis ma zaimplementowany mechanizm, dzieki ktoremu mozna zamiast powyzszych linkow podac bardziej przyjazne:

http://domena.pl/index.php/wartosc1/wartosc2/zm3/wartosc3

lub

http://domena.pl/index.php/wartosc1/wartos...c3/zm4/wartosc4

Jak widac, pierwsze 2 zmienne maja zawsze takie same nazwy, wiec podaje tylko ich wartosc, a kazda nastepna jest podawana jako nazwa_zmiennej/wartosc. Takie linki stosuje aktualnie.

 

I dalej chce wykotrzystac mod_rewrite, zeby sie pozbyc z URL-a index.php:

http://domena.pl/wartosc1/wartosc2/zm3/wartosc3

lub

http://domena.pl/wartosc1/wartosc2/zm3/wartosc3/zm4/wartosc4

Ale jednoczesnie ma zostac zachowana mozliwosc wywolywania stron przy uzyciu dwoch pierwszych sposobow.

 

Mam nadzieje, ze bedziesz potrafil mi pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Powinno działać

RewriteEngine On
RewriteRule ?index.php?/(.*)/(.*)/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4&$5=$6 [L]
RewriteRule ?index.php?/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4 [L]

te znaki zapytania przed i po index mają być.

Jeżeli to nie zadziała to zerknij w tą:

RewriteEngine On
RewriteRule index.php/(.*)/(.*)/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4&$5=$6 [L]
RewriteRule (.*)/(.*)/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4&$5=$6 [L]
RewriteRule index.php/(.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4 [L]
RewriteRule (.*)/(.*)/(.*)/(.*) index.php?module=$1&action=$2&$3=$4 [L]

To jest cała reguła, nic nie dodawaj.

Odnośnik do komentarza
Udostępnij na innych stronach

Drugi sposob zadzialal co do linkow, ale po jego zastosowaniu nie laduja mi sie obrazki ustawiane w CSS (np. tlo).

Jak mam cos takiego w zewnetrznym arkuszu stylow:

div#naglowek {
        width: 770px;
        height: 100px;
        background: url('grafika/logo_tlo.jpg');
    }

to tlo sie nie zaladuje.

 

Dawno z niczym nie mialem tyle problemow co z mod_rewrite :(

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz tak patrze to pierwsza regula nie ma prawa dzialac bo znaki zapytania powinny byc przed i za "/".

Co do arkuszy stylów to po prostu wstaw pelny adres do css'ów czyli np. www.strona.pl/style.css bo zapewne masz <link href="style.css" rel="stylesheet" type="text/css" /> bez pelnego adresu

W samym stylu tez podaj pelny adres i nie bedzie problemu.

Odnośnik do komentarza
Udostępnij na innych stronach

To nie tak, sam arkusz css sie laduje (bo mam bezwzgledny adres) i cale formatowanie wygladu strony jest ok, tylko obrazki tla sie nie laduja. A przy wczesniejszych probach takich problemow nie bylo.

 

A co dokladnie chciales osiagnac tymi znakami "?" ?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...