Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ladne urle - mod_rewrite
Forum PHP.pl > Forum > PHP
Revan
Witam.
Pisalem skrypt dla kolegi na domowym kompie z krasnalem. Wykorzystalem przyjazne url-e Scannera z php.pl. Wszystko ladnie dziala, uploaduje skrypt na serwer kolegi, uruchamiam, klikam na jakis link i... 404.
Domyslilem sie po komentarzach do Przyjaznych Url-i jest cos z MultiViews w apachu. Niestety do konfiguracji serwera kolega nie ma dostepu (jest tylko plesk). Tak wiec zostaje chyba tylko mod_rewrite. Szukajac forum dokopalem sie do skrptu sprawdzajacego czy jest zainstalowany. Test przebiegl pomysnie, ale przejąlem sie troche tymi regulami itp. Z apache.org niezbyt duzo sie dowiedzialem (raczej - niewiele zrozumialem). I moje pytanie: Czy da sie uzyskac bardzo podbony efekt przy uzyciu mod rewrite jak przy sposobu Scannera ?
Mam link http://localhost/index/zmienna/druga/trzecia/czwarta
i sposobem z php.pl mam url[0] rowna zmienna url[1] druga, url[2] trzecia i url[3] czwarta.
Nie bede Was oszukiwal, prosze o napisanie takiej regulki, albo podania linku (zapytanie do google tez moze byc rolleyes.gif ) do polskiej strony gdzie jasno jest wytlumaczenie tworzenia regulek.
Z gory dziekuje.
Pozdrawiam,
Revan.
bregovic
Po polsku niestety nie znam żadnej strony, ale możesz przeczytać to (po angielsku) - i może coś zrozumiesz winksmiley.jpg

Ale, żeby nie być niepomocnym, napiszę ci regułkę - potrzebujesz przeniesienia http://host/zmienna1/zmienna2/zmienna3 do postaci zrozumiałej przez php? najłatwiej chyba będzie tak:
Kod
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/?$ /index.php?zmienna1=$1&zmienna2=$2&zmienna3=$3

To jest rozwiązanie najłatwiejsze - ale w sumie najmniej optymalne. O wiele lepeij użyć czegoś takiego:
Kod
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule .* index.php

To rozwiązanie przekarze wszystkie żądania do pliku index.php. Aby móc użyć zmiennych z adresu użyj następującej konstrukcji w pliku index.php:
  1. <?php
  2.  
  3. $arrUrl = array();
  4. $arrReturn = array();
  5. $intA = count(explode('/', 'http://host/')) - 4;
  6. $arrUrl = explode('/', substr($_SERVER[&#092;"REQUEST_URI\"], 1));
  7. for($intI = 0, $intCount=count($arrUrl); $intI<=$intCount; $intI++)
  8. {
  9. if ($intI < $intA)
  10. {
  11. continue;
  12. }
  13. else
  14. {
  15. if(empty($arrUrl[$intI]))
  16. {
  17. continue;
  18. }
  19. $arrReturn[] = $arrUrl[$intI];
  20. }
  21. }
  22.  
  23. ?>
Ace
O ile dobrze pamietam, to co Scaner napisal na php.pl dziala, sam tego uzylem w kilku projektach i dziala idealnie. W tym co Scaner opisal, trzeba zastosowac odwolanie sie do skryptu php, czyli nie
www.example.com/zmienna1/zmienna2/zmienna3
lecz
www.example.com/index.php/zmienna1/zmienna2/zmienna3
Wtedy nie powinno byc problemu pod warunkiem ze plik index.php istnieje. Zmienne wyciagane sa z adresu i powinno byc ok.
Revan
zle mnie zrozumiales ace
wiem jak sie korzysta z tego sposobu Scannera, napisalem skrpyt oparty na jego sposob ale mi on po prostu nie dziala na serwerze na ktorym on mial byc.
bendi
sproboj na webhelp
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.