Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Przyjazne linki mod_rewrite
Gray
post
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.04.2010

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Gray
post
Post #3





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 5.04.2010

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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 (IMG:style_emoticons/default/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


Ten post edytował Sephirus 20.08.2012, 07:36:50
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: 3.10.2025 - 19:07