Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: .htaccess i dodatkowa zmienna w adresie
Forum PHP.pl > Forum > PHP
Mayka
No i kolejny z serii dziwnych problemów. W związku z tym że chciałbym wprowadzić "przyjazne" linki postanowiłem, poszukać, poczytać i wymyślilem coś takiego:
  1. Options FollowSymLinks
  2. RewriteEngine On
  3. RewriteBase /
  4. RewriteRule ^/?([a-z0-9]*)/$ index.php?strona=$1 [NC,L]


tylko teraz powiedzcie mi co zrobić jak bede potrzebował 3 zmienne do index.php ? 3 rózne reguły napisać trzeba ? czy wtedy odwołać index.php?strona=cos&inna=cosinnego&jeszczeinna=cos ? i co z przesyłaniem czegoś _getem ? Bo nie bardzo to rozumiem.. jak by mogł ktoś to "rozrysować" normalnie to byłbym wdzieczny..smile.gif
CuteOne
Kod
RewriteRule ^/?([a-z0-9]*)/([a-z0-9]*)/([a-z0-9]*)/ $ index.php?a=$1&b=$2&c=$3 [NC,L]
RewriteRule ^/?([a-z0-9]*)/([a-z0-9]*)/ $ index.php?v=$1&g=$2[NC,L]
RewriteRule ^/?([a-z0-9]*)/ $ index.php?z=$1 [NC,L]


http: // www. w.pl/aa/aa/ - apache przypisze ten adres do drugiej regułki (wstawiłem spacje bo forum parsuje linki na tagi html smile.gif)
Mayka
Czyli mam rozumieć że można przypisać inne parametry dla każdej liczby zmiennych ?

a można zrobić coś w tym stylu ?
RewriteRule ^/?([a-z0-9]*)/ $ index.php?z=jakasstala&b=$1 [NC,L]
Bo nie bardzo chce mi to działać..

Jeszcze jedno pytanie można zrobić za pomocą htacces żeby przy wpisaniu adresu strony wyswietlał ./index.html ale żeby pozwolił na otworzenie www.calyadres.pl/index.php (cały adres) ?
by_ikar
I słusznie że nie chce ci to działać, bo składnia jest błędna. Znak zapytania przed nawiasem oznacza warunek, gwiazdka oznacza zero lub więcej i nie można ustawić dla zakresu znaków (a-z0-9). Poprawnie powinno to wyglądać tak:

Kod
RewriteRule ^/([\w]+)/ $ index.php?z=jakasstala&b=$1 [NC,L]
Mayka
Jeszcze jedno pytanie, potrzebował bym jeszcze takie cudo jeśli są literki to:
RewriteRule ^/([a-z]*)/ $ index.php?b=$1 [NC,L]
a jeśli cyferki to
RewriteRule ^/?([0-9]*)/ $ index.php?d=$1 [NC,L]
Czy takie coś przejdzie ?
by_ikar
Kod
RewriteRule ^/([\w]+)/$ index.php?b=$1 [NC,L]
RewriteRule ^/?([\d]+)/$ index.php?d=$1 [L]


Po co wstawiasz gwiazdki po zakresie znaków? Sprawdź czy zadziała. W sumie powinno, dlatego że zawsze jest najpierw dopasowywanie adresu po lewej stronie i jeżeli się coś nie będzie zgadzać, to wówczas weźmie pod uwagę kolejną regułkę etc.
Mayka
problemów ciąg dalszy, jak by ktoś mogł mi pomoc z tym bo nie moge sobie poradzic

RewriteBase /
RewriteRule ^/?([a-z]*)/$ index.php?strona=$1 [NC]
RewriteRule ^/?([a-z]*)/?([0-9]*)/$ index.php?strona=$1&item=$2[NC]
RewriteRule ^/kategoria-?([0-9]*)/$ index.php?kategoria=$1[NC]
RewriteRule ^/kategoria-?([0-9]*)/podkategoria-([0-9])/$ index.php?kategoria=$1&podkategoria=$2[NC,L]


Pierwsze 2 chodzią tylko mam problem z 2 ostatnimi bo chyba są traktowane tymi pierwszymi. Czy to da się jakoś pogodzić ?
Chodziło mi o to żeby jeśli jest w adresie słowo 'kategoria' było traktowane tymi 2 ostatnimi ?
Pilsener
Brniesz w rozwiązania przestarzałe, skomplikowane i mało wydajne.

Dzisiaj używa się tylko jednej reguły, która przepisuje dowolny adres a następnie jest on obrabiany po stronie php za co odpowiada tak zwany router.

Przykład:

1. Mamy adres:
strona.pl/galeria/fotki;z;wakacji-2,456.html

2. Zostaje on przepisany na:
strona.pl?adres=galeria/fotki;z;wakacji-2,456.html

3. Teraz do akcji wkracza nasz router który obrabia zmienną $_GET['adres'] i otrzymujemy tablicę parametrów:
moduł = galeria
tytuł = fotki z wakacji
id = 456
page = 2

4. Tworzenie adresów odbywa się podobnie:
  1. echo $this->url($parametry,$opcje);


Zalety:
- nie musisz się babrać w .htaccess
- tworzenie reguł w PHP jest prostsze, elastyczniejsze i szybsze
- w każdej chwili można zmienić koncepcję adresów dokonując zmian jedynie w pliku cfg routera (przekazywane i odbierane parametry zostają bez zmian)

Najlepiej utworzyć sobie jakiś router standardowy działający na zasadzie: domena/moduł/słowa;kluczowe-nr_strony,parametr1,parametr2.html
A potem rozbudować system o definiowanie własnych routerów. Można też skorzystać z gotowych rozwiązań, których nie brak.

Najprostsze systemy po prostu zastępują znaki & i = tworząc coś w stylu:
strona.pl/klucz1-wartosc1;klucz2-wartosc2;klucz3-wartosc3

Widziałem już serwisy gdzie było kilkaset wpisów w .htaccess i weź teraz coś tam zmień, popraw, debuguj...
Mayka
Nie słyszałem o takim rozwiązaniu, ale całkiem ciekawie sie to zapowiada, rozumiem że do adresu można wtedy dodać nazwe pobieraną np z mysql ?
A mogłbyś podać jakiegoś linka do takich gotowych rozwiązań ? Bo 90% tego co znalazłem to pod jomle dedykowane. I dosyć skomplikowane, a mnie wystarczy cos prostego wink.gif
by_ikar
Tutaj na forum masz kilka nawet gotowych rozwiązań, dość prostych. Htaccess ci działa nie prawidłowo, bo używasz go w nieprawidłowy sposób. Największym chyba błędem jest używanie tej gwiazdki, która łapie zero lub więcej znaków, powodując tym samym łapanie nawet pustego adresu. Następnie przed nawiasem umieszczasz znak zapytania, robiąc z tego wyrażenia, wyrażenie opcjonalne, czyli znów pierwsza linijka htaccess będzie łapać wszystko. Przeczytaj jakieś podstawowe informacje odnośnie htacces, oraz odnośnie wyrażeń regularnych i dopiero twórz.

htaccess: http://eriz.pcinside.pl/weblog/mod_rewrite...wiazac-208.html
regexp: http://wyrazeniaregularne.wordpress.com/ (wyrażenia w takiej w sumie podstawie, aby tylko załapać co po co i dlaczego)

Poczytaj o wyrażeniach, poczytaj o htaccess. Podstawy na prawdę nie są trudne, można opanować to wszystko w jeden dzień, bez większych problemów.
Pilsener
Z gotowych rozwiązań to wiem, że z CMSów oparty jest o to Drupal natomiast z frameworków - Zend. Pewnie też bez problemu można wyguglać kilka klas do routingu, nawet n tym forum:
http://forum.php.pl/lofiversion/index.php/t41020.html
Mayka
Dzieki za pomoc, ta strona która dał ikar jest bardzo pomocna, w końcu ktoś wpadł na pomysł rozpisania tego mod_rewrite wink.gif Dzieki wielkie. A z klasami do tworzenia url'i bede jeszcze walczył wink.gif

A jeszcze walcze z tymi htacces takie coś żeby zrobić:
  1. RewriteRule ^/zobacz,?([0-9]+)/$ index.php?stala=zmienna&zobacz=$1[NC]

bo to:
  1. RewriteRule ^/*([a-z]+)/zobacz,?([0-9]+)/$ index.php?stala=$1&zobacz=$2[NC]

działa, ktoś może mi powiedzieć dlaczego ?
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.