Всё чаще на форуме стали появляться вопросы, связанные с ЧПУ (Человекопонятный УРЛ).
В принципе, ничего нового и оригинального в идее понятного УРЛа нет. Про это писал и Лебедев, и другие товарищи. Вообще, мне всегда нравились УРЛы такого, например, вида: http:// forum.php.su/forums/33 . Есть несколько способов реализации задуманного:
1. Создавать подпапки в соответствии с нужной нам структурой сайта. Для форумов и других генерируемых ресурсов, естественно, этот вариант не подходит.
2. Используем возможности страницы ошибок. Когда с сервера запрашивается несуществующая страница, сервер выдает 404 код ответа. Идея заключается в том, что бы прописать в фале .htaccess страницу, которая будет выдаваться при ошибке 404, а уже эта страница будет смотреть на текущий УРЛ и выдавать нужный документ, То есть, в .htaccess пишем:
Пользователь набирает http://forum.php.su/forums/33, такая страница не найдена, и загружается файл index.php. Дальше — все просто. Переменная $_SERVER["REQUEST_URI"] дает нам адрес вызываемой страницы (в данном случае это будет /forums/33), как вывести на экран соответствующий документ — будет описано чуть ниже.
Этого мало. В некоторых браузерах и с поисковиками такой фокус не пройдет: страница 404 будет выдавать соответствующий код, и страницы индексироваться не будут. Поэтому надо, чтобы страница, которая грузится в случае ошибки 404, изменяла бы код ошибки и сигналила, мол, все ОК, есть такая страница: <?php header("http/1.1 200 Ok"); ?>
Итого: прописываем в .htaccess страницу, которая, собственно, за все отвечает (у меня это index.php). В этой странице пишем php-скрипт, который работает с $_SERVER["REQUEST_URI"], шлет заголовок «http/1.0 200 Ok» и отображает то, что надо.
3. Для этих (и не только) целей есть специальный модуль в Апаче, который называется mod_rewrite (для работы модуля, в httpd.conf должна быть раскомментирована строчка "LoadModule rewrite_module modules/mod_rewrite.so"). Он позволяет «переписывывать урлы», то есть, преобразовывать их «на лету» по правилам, которые вы ему опишите.
Это очень мощный модуль, и если вы в нем разберетесь, то сможете творить чудеса. читайте документацию, благо, что ее полно, я лишь покажу, как реализовывал сам :
в .htaccess пишется код:
CODE (
text):
скопировать код в буфер обмена
RewriteEngine On
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index\.html?$ index.php [N]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php
, который проверяет, существует ли запрошенный адрес, если нет - перебрасывает на Index.html (если нет - index.php). В index.php, так же, как и в п.2, мы разбираем строку $_SERVER["REQUEST_URI"] :