Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przyjazne linki mod_rewrite
Forum PHP.pl > Forum > Przedszkole
Gray
Hej, bawię się przyjaznymi linkami i chciał bym zrozumieć parę rzeczy. Do tej pory link w który należało kliknąć aby zobaczyć obrazek na mojej stronie wyglądał tak:
  1. <a href="obrazek.php?id='.$img['id'].'">


Zrobiłem dla niego taki mod_rewrite:
  1. RewriteRule ^obrazek.html-([^-]+)$ obrazek.php?id=$1 [L]


No i wpisując link np. obrazek.html-12 otwiera mi odpowiedni obrazek. Czy teraz muszę zmienić link w który klika użytkownik na:
  1. <a href="obrazek.html-'.$img['id'].'">


Czy tak należy zrobić? Wtedy użytkownik kopiując link z przeglądarki będzie kopiował przyjazny link.

Inną sprawą jest, że chciał bym mieć przyjazny link w takiej postaci:
obrazek.html/12 lub obrazek.html/12/

Czyli podobny do poprzedniego tylko zamiast myślnika slash, tylko kiedy robię taki mod_Rewrite to wyskakują błędy i strona się źle otwiera :/

Proszę o pomoc i z góry dzięki.
Sephirus
Cytat
No i wpisując link np. obrazek.html-12 otwiera mi odpowiedni obrazek. Czy teraz muszę zmienić link w który klika użytkownik na...


Tak - w sumie po to się robi przyjazne linki by były one widoczne a samo ich utworzenie działa tylko w jedną stronę "przyjazny => zwykły". Jak widac wejście na dowolny z nich powoduje wyświetlenie obrazka ale porzyjazny ma za zadanie lepiej się prezentować. Samo dodanie regułki do .htaccess nic nie zmieni - należy podmienić linki na stronie.

Cytat
Inną sprawą jest, że chciał bym mieć przyjazny link w takiej postaci:
obrazek.html/12 lub obrazek.html/12/

Czyli podobny do poprzedniego tylko zamiast myślnika slash, tylko kiedy robię taki mod_Rewrite to wyskakują błędy i strona się źle otwiera :/


Wstawiając znaki "/" do adresu nawet w mod-rewrite trzeba liczyć się z faktem że skrypty wyświetlają się dobre owszem ale przeglądarka widzi "/" jako folder.

Załóżmy, że masz plik ze stylami (css) w głównym katalogu serwera www czyli przykładowo www.strona.pl/style.css

Jeśli dodajesz ten plik ze stylami do kodu strony podając link względny jako samą nazwę pliku (czyli : "style.css") to na adresie www.strona.pl/ to zadziała ale na www.strona.pl/folder/ już nie bo przeglądarka będzie szukać tego pliku w www.strona.pl/folder/style.css a tam go nie ma. Browser nie wie czy "/" w linku to foldery czy mod-rewrite - trzeba jej zatem pomóc:

1. Można podawać linki do CSS/JS/obrazków bezwględne - "http://www.strona.pl/style.css" - wtedy to zawsze zadziała
2. Można podawać linki do głównego katalogu serwera www czyli "/style.css"
3. Można podawać linki względne ("style.css") i dodać do HEAD znacznik BASE

  1. <base href="http://www.strona.pl/"/>


HTH wink.gif
Gray
Dzięki za podpowiedź. A czy istnieje może jakiś inny sposób na te slashe niż przepisywanie linków do plików?

I czy mógł by mi ktoś podsunąć przykład odpowiednio przefiltrowanej zmiennej zawierającej tytuł tak, aby nadawał się on do przyjaznych linków? mam tu na myśli podmianę spacji na - lub _ do tego usunięcie polskich znaków czy też znaków interpunkcyjnych, znaków specjalnych itd. będę wdzięczny smile.gif
Sephirus
Cytat
Dzięki za podpowiedź. A czy istnieje może jakiś inny sposób na te slashe niż przepisywanie linków do plików?


No do tego wykorzystaj to BASE - dodajesz to w HEAD i nie musisz zmieniać linków wink.gif

Tu masz jakąś klasę, gdzieś tam jej używam właśnie w takim celu (jest bardziej rozbudowana - zostawiłem jedynie metodę, którą potrzebujesz).

  1. class Core_Link {
  2. private static $plLetters = array('ą','ż','ś','ź','ę','ć','ń','ó','ł','Ą','Ż','Ś','Ź','Ę','Ć','Ń','Ó','Ł',' ');
  3. private static $urlLetters = array('a','z','s','x','e','c','n','o','l','A','Z','S','X','E','C','N','O','L','-');
  4.  
  5. public static function urlEncode($part) {
  6. $part = trim(str_replace(self::$plLetters,self::$urlLetters,$part),'-');
  7. $part = preg_replace('/[^a-z0-9\-]+/si','',$part);
  8. $part = preg_replace('/[\-]{2,}/si','-',$part);
  9.  
  10. return strtolower(trim($part,'-'));
  11. }
  12. }
  13.  
  14. echo Core_Link::urlEncode('To jest jakiś dziwny tytuł z polskimi krzakami takimi jak: ĄŚŁłĆŁęćń itd... :)';
  15. // to-jest-jakis-dziwny-tytul-z-polskimi-krzakami-takimi-jak-asllclecn-itd
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.