Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][mod_rewrite] Jak zmienić plik.php?id=1 w nazwa_strony.html ?
Forum PHP.pl > Forum > Przedszkole
Elber
Witam,

ogólnie w miarę ogarniam mod_rewrite, ale zastanawiam mnie jedna opcja, jak zrobić aby po wywołaniu zmiennej, której wartość to INT np. plik.php?id=1 dzięki mod_rewrite link wyglądał /nazwa_danej_strony.html (.html ->opcjonalnie). Na jakiej zasadzie miałoby to być zrobione? Wiem jak zrobić aby zamienić plik.php?nazwa=cos_tam na /cos_tam.html jednak nie mam pomysłu jak ID danej podstrony zamienić na link z jej tytułem.
Korab
Widziałem coś takiego ostatnio. Wrzuć "mod rewrite" w Google.
EDIT: O! Obczaj to: http://www.php.rk.edu.pl/w/p/modrewrite-krotkie-urle/
hondek
Chyba sam mod rewrite nie wywróży Ci, jaki id w bazie ma podana strona, możesz wprobować przepisac (.+).html np. na routes.php?site=$1 i w php już szukać plików / wpisów w bazie po nazwie smile.gif

pozdro
Elber
OK, przykładowo mam link category.php?id=2 , Kategoria o id 2 w bazie ma nazwę test, jak teraz z tego zrobić link /test.html bądź /2-test (bo chyba jednak trzeba ID w link jakoś przekazać ?)questionmark.gif
qrzysztof
Po prostu robisz category.php?id=2&nazwa=test. I to przerabiasz w mod_rewrite na category.php/2-test.
hondek
No nie koniecznie trzeba, bo możesz zawsze szukać po nazwie, z tym że nazwa musiała by być unikalna, natomiast chyba lepiej id umieścić w urlu, żeby nie męczyć za bardzo mysqla smile.gif

np. www.domena.pl/test-2.html

reguła np.
  1. ([a-zA-Z0-9]+)-([0-9])+ page.php?page=$2


coś w ten deseń smile.gif
Elber
Cytat(hondek @ 29.11.2011, 13:22:53 ) *
No nie koniecznie trzeba, bo możesz zawsze szukać po nazwie, z tym że nazwa musiała by być unikalna, natomiast chyba lepiej id umieścić w urlu, żeby nie męczyć za bardzo mysqla smile.gif

np. www.domena.pl/test-2.html

reguła np.
  1. ([a-zA-Z0-9]+)-([0-9])+ page.php?page=$2


coś w ten deseń smile.gif



Ok wink.gif tylko podajesz w linku tylko page=$2 co w regule odpowiada -([0-9]) a skąd pierwsza wartość ([a-zA-Z0-9]+) questionmark.gif
hondek
pierwsza wartość to nazwa strony, które nie jest istotna do znalezienia jej w bazie ( w $2 masz jej id ) więc jej nie przekazujesz dalej smile.gif
Elber
Tak wink.gif Jak najbardziej to wiem;) Chodziło mi o to w którym miejscu i gdzie mam $1 przekazać smile.gif
qrzysztof
Elber, idealne rozwiązanie Twojego problemu chyba nie istnieje. Trzeba iść na kompromis:

  • albo optymalna baza (z id kategorii w obcych tabelach),
  • albo ładne adresy w pasku przeglądarki smile.gif
hondek
$1 nie przepisujesz bo to tylko niceurl który tobie nie jest potrzebny do niczego, bo wyciągniesz go i tak z bazy po id smile.gif
Elber
Dobra wink.gif Teraz zaczaiłem jak sobie linka wyobraziłem smile.gif Sory 2 ostatnie pytania były nie potrzebne smile.gif Dzięki wielkie za odp wink.gif Już w wszystko czaję smile.gif

([a-zA-Z0-9]+)-([0-9])+ page.php?page=$2

<a href="$nazwa_z_bazy-$id_z_bazy">Nazwa z Bazy</a>

Pozdrawiam

To jeszcze jedno pytanie smile.gif Przez jaką zmienną w php przepuścić nazwę z bazy żeby zamieniła polskie znaki i spacje na normlany text czyli ą na a spacje na _ itp questionmark.gif
roghatt
ja używam tej funkcji:
  1. function seoFriendly($value){
  2. $trans = array("Ä…"=>"a","Ä™"=>"e","L›"=>"s","Ls"=>"z","LL"=>"z","ć"=>"c","L„"=>"n","L‚"=>"l","Al"=>"o"); //tablica z literkami do zmiany
  3. $value = strip_tags(mb_convert_case($value, MB_CASE_LOWER, "UTF-8"));
  4. //strtolower z polskimi literkami
  5. $value = trim(strtr($value, $trans));
  6. //zamienia polskie literki na literki z kodu ascii
  7. $value = preg_replace('/\s\s+/', '', $value);
  8. //jezeli znajdzie jeden niz wiecej znakow bialych obok siebie, to usuwa go
  9. $value = preg_replace('/[^a-z0-9]+/','-',$value);
  10. //znaki rozne od pozostalych liter ascii i cyfr zmieniamy na znaki przestankowe (myslniki)
  11. return $value;
  12. //zwraca przyjazny ciag znakow
  13. }


pozniej zmienna przepuszczasz przez to:
  1. $zmienna=seoFriendly($zmienna);
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.