Главная » ЧПУ и PHP (revisited)
ЧПУ - это термин, придуманный командой НовоКиберска, обозначает он"Человекопонятный УРЛ". Термин нигде широко не употреблялся, пока я ненаписал 5 сентября 2000 года заметку "ЧПУ и PHP". За эти три годатермин довольно неплохо раскрутился. За эти годы очень многие ссылалисьна эту заметку, поэтому я взял на себя труд переписать ее, добавив ещенесколько способов сделать ЧПУ и убрав всякий мусор. Итак…В принципе, ничего нового и оригинального в идее понятного УРЛанет. Про это писал и Лебедев, и другие товарищи. Вообще, мне всегданравились УРЛы такого, например, вида: http://php.resourceindex.com/Complete_Scripts/Guestbooks/
Итак, как это сделать в домашних условиях?Способ раз
Вообще, самая первая мысль - это создаватьдля каждой заметки поддиректорию с соответствующим именем и помещать внее index.html, то есть сделать так, чтобы по адресуhttp://spectator.ru/technology/php/user_friendly_urls лежал бы реальныйфайл. Разумеется, так дело не пойдет.Способ два
Думаем дальше. Раз страница не существует,то она выдает 404. Так что вторая идея - прописать в фале .htaccessстраницу, которая будет выдаваться при ошибке 404, а уже эта страницабудет смотреть на текущий УРЛ и выдавать нужный документТо есть, в .htaccess пишем:------------------------------------
ErrorDocument 404 / index . php3
ErrorDocument 401 / index . php3
------------------------------------ Пользователь набираетhttp://spectator.ru/technology/php/user_friendly_urls, такая страницане найдена, и загружается файл index.php3. Дальше - все просто.Переменная $REQUEST_URI дает нам адрес вызываемой страницы (в данномслучае это будет /technology/php/user_friendly_urls), вывести на экрансоответствующий документ - дело техники.Этого мало. В некоторых браузерах и с поисковиками такой фокусне пройдет: страница 404 будет выдавать соответствующий код, и страницыиндексироваться не будут. Поэтому надо, чтобы страница, котораягрузится в случае ошибки 404, изменяла бы код ошибки и сигналила, мол,все ОК, есть такая страница: Итого: прописываем в .htaccess страницу, которая, собственно,за все отвечает (у меня это index.php3). В этой странице пишемphp-скрипт, который работает с $REQUEST_URI, шлет заголовок "http/1.0200 Ok" и отображает то, что надо.Плюсы: Очень простой способ. Работает почти везде.
Минусы:При таком способе нельзя постить содержимое формы на несуществующиепсевдоурлы. И если в Апаче ведется лог 404-ых ошибок, то он будетзабит.Способ три
Для этих (и не только) целей естьспециальный модуль в Апаче, который называется mod_rewrite. Онпозволяет "переписывывать урлы", то есть, преобразовывать их "на лету"по правилам, которые вы ему опишите.Это очень мощный модуль, и если вы в нем разберетесь, тосможете творить чудеса. Сам я до сих пор довольно мало с ним работал,поэтому читайте документацию, благо, что ее полно.Module mod_rewrite URL Rewriting Engine.
A Users Guide to URL Rewriting with the Apache Webserver.
Модуль Apache mod_rewrite.
Mod_rewrite для чайников.Плюсы: Очень мощный способ.
Минусы: Может не хватить мозгов. На хостинге может быть не установлен этот модуль.Способ четыре
Основан на директиве FilesMatch, которая в Апаче является core feature. Все просто. Пишем опять же в .htaccessAction throw / index . php
ForceType throw
FilesMatch-->
ForceType application / x - httpd - php
FilesMatch-->После этого все УРЛы, которые подпадают под условие "^([^.]+)$", (тоесть все урлы, в которых не содержится точка) будут передаваться наindex.php. Вы можете написать свое условие, разумеется.Плюсы: Простой и удобный способ.
Минусы: Говорят, что длятого, чтобы ForceType работал, php должен быть подключен к апачу в видемодуля. Если php вызывается, как обыкновенный CGI - ForceType работатьне будет. Категория: Web технологии | Просмотров: 203