ďťż
Podstrony
|
telcocafeJedną z metod na przyjazne URL-e jest wykorzystanie PATH_INFO.W przeciwieństwie do mod_rewrite problem ze ścieżkami pojawia się także w PHP. :) Na początku zawsze tworzę pełny adres URL oraz ścieżkę:define('PATH', str_replace('//','/',dirname($_SERVER['PHP_SELF']).' /')); define('URL', 'http://'.$_SERVER['SERVER_NAME'].PATH); Stała URL przechowuje pełną ścieżkę do serwisu. Po co jeszcze tworzę stałą PATH i dołączam ją do URL? Niektóre serwisy znajdują się w podkatalogu, np. na localhost lub na darmowych hostingach bez subdomen. Gdzie stosuję stałą URL? Na przykład przy przekierowaniach Location. Specyfikacja HTTP 1.1 każe podawać pełną ścieżkę, lecz przeglądarki przekierują także do adresu względnego. Wolę jednak trzymać się standardów - słusznie? ;) Poza tym wykorzystuję stałą w innych częściach serwisu, aby określić np. adres bazowy pliku RSS, wiadomości E-Mail... Poniżej przedstawiam wartości pewnych elementów $_SERVER dla adresu: /index.php/art/1 Przykład 1 - mod_rewrite PHP_SELF: /sciezka/CMS/index.php dirname(PHP_SELF) â PATH: /sciezka/CMS Tutaj wszystko poprawnie. Przykład 2 - PATH_INFO (bez mod_rewrite) PHP_SELF: /sciezka/CMS/index.php/art/1 dirname(PHP_SELF) â PATH: /sciezka/CMS/index.php/art Jak sobie z tym próbuję poradzić?$_SERVER['PHP_SELF'] = strstr($_SERVER['PHP_SELF'], 'index.php', 1); Wszystko dobrze - /sciezka/CMS/ - ale: dirname(PHP_SELF) wynosi: /sciezka zamiast /sciezka/CMS Dlaczego funkcja ucina wartość "/CMS/"? Dobrze, przecież mogę równie dobrze wyciąć ze ścieżki fragment:'index.php/' . $_SERVER['PATH_INFO'] Jednak nie chcę nic przekombinować. 1) Czy modyfikować PHP_SELF tak, aby zawierał tylko /sciezka/CMS/? Czy to się nie opłaca? 2) Są lepsze sposoby na uzyskanie prawidłowej ścieżki? Bez zbędnych operacji. 3) Czy $_SERVER['SCRIPT_NAME'] działa także na innych serwerach niż Apache? Użytkownik Ferrari edytował ten post 24 grudzień 2009, 22:14 Popatrz jeszcze na REQUEST_URI. Stosuj też domknięte adresy URL. Unikniesz różnych problemów później ze ścieżkami czy parametrami GET. Użytkownik Riklaunim edytował ten post 25 grudzień 2009, 00:44 |
|||
Sitedesign by AltusUmbrae. |