Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Всё чаще на форуме стали появляться вопросы, связанные с ЧПУ (Человекопонятный УРЛ).
В принципе, ничего нового и оригинального в идее понятного УРЛа нет. Про это писал и Лебедев, и другие товарищи. Вообще, мне всегда нравились УРЛы такого, например, вида: 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"). Он позволяет «переписывывать урлы», то есть, преобразовывать их «на лету» по правилам, которые вы ему опишите.
Это очень мощный модуль, и если вы в нем разберетесь, то сможете творить чудеса. читайте документацию, благо, что ее полно, я лишь покажу, как реализовывал сам :
, который проверяет, существует ли запрошенный адрес, если нет - перебрасывает на Index.html (если нет - index.php). В index.php, так же, как и в п.2, мы разбираем строку $_SERVER["REQUEST_URI"] :
В массиве $url у нас теперь содержатся параметры, переданные в строке браузера, этот массив нам заменяет массив $_GET .
Вобщем-то на этом пока закончу, будут вопросы - задавайте в этом топике.
ps
Как только появится возможность выкладывать форматированный и подсвеченый код - выложу класс , который сильно облегчает работу с $_SERVER["REQUEST_URI"] .
Покинул форум
Сообщений всего: 157
Дата рег-ции: Янв. 2009 Откуда: Албания
Помог: 0 раз(а)
Хорошая статья. Я как раз хотел зазобраться в этом вопросе. Поищу еще информацию и может допишу, что-то свое. Если потребуется.
Владимир
Отправлено: 20 Января, 2009 - 13:40:57
Гость
Покинул форум
Сообщений всего: 64
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
так может быть написать цикл статей по .htaccess ? где и это затронуть и не только
Stierus з.ы. вот это самое о чем ты и говорил ;) или думал)
Stierus
Отправлено: 20 Января, 2009 - 13:50:14
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
На основе проблем сюда вносить поправки, выложить класс и при каждой новой теме кидать ссылку.
ps
Примерно так думал, только ссылки на учебники вставить надо.
Владимир
Отправлено: 20 Января, 2009 - 13:51:36
Гость
Покинул форум
Сообщений всего: 64
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
хм... думаю что можно было бы сделать полный фАК по работе с .htaccess с примерами на основе проблем
как идея?)
Ыыы
Отправлено: 20 Января, 2009 - 13:51:55
Частый гость
Покинул форум
Сообщений всего: 169
Дата рег-ции: Июль 2008 Откуда: Россия, Хабаровск
, который проверяет, существует ли запрошенный адрес, если нет - перебрасывает на Index.html (если нет - index.php). В index.php, так же, как и в п.2, мы разбираем строку $_SERVER["REQUEST_URI"] :
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
хм... думаю что можно было бы сделать полный фАК по работе с .htaccess с примерами на основе проблем Улыбка
как идея?)
У меня нет проблем с .htaccess, о чем писать - не знаю, по мере появления проблем - будут вносится изменения, добавляться что-то новое (об этом я выше и писал)
Владимир
Отправлено: 20 Января, 2009 - 14:07:01
Гость
Покинул форум
Сообщений всего: 64
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Stierus пишет:
У меня нет проблем с .htaccess, о чем писать - не знаю, по мере появления проблем - будут вносится изменения, добавляться что-то новое (об этом я выше и писал)
не буду комментировать.
Статья хорошая.
MrBlack
Отправлено: 21 Января, 2009 - 04:32:20
Новичок
Покинул форум
Сообщений всего: 11
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Я сделал все как по статье.
У меня в массив такой получается.
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Вопрос составьте точнее. ЧПУ созданы для того, что бы вводя в адресной строке браузера "http://localhost/site/about" , в случае, если такого файла не существует, ваш запрос перенаправлялся в другое место (в моём случае это http://localhost/index.php ), т.е. человек в адресной строке ввёл одно, но на самом деле сервер отображает страницу, сгенерированную другим скриптом .
ps
Что вы имеете ввиду под "подмена" - я не знаю. Касательно именно вашего случая, вам просто нужны другие правила в .htaccess, какие именно - вам отписали в вашем посте.
CodeWarrior
Отправлено: 21 Января, 2009 - 13:39:23
Частый гость
Покинул форум
Сообщений всего: 157
Дата рег-ции: Янв. 2009 Откуда: Албания
Помог: 0 раз(а)
Кстати, я не знаю одного: будет ли переполняться лог апача при постоянном обращении к несуществующим ресурсам?
Stierus
Отправлено: 21 Января, 2009 - 13:44:04
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Если ты про 3-й пункт - записей не будет, ибо это нормальное поведение, если про 2-й - скорее всего, придётся настраивать ведение логов апача (этим способом не пользовался, чисто логически, логировать должно, на практике не проверял).
Вездеход
Отправлено: 27 Декабря, 2009 - 13:36:46
Частый посетитель
Покинул форум
Сообщений всего: 820
Дата рег-ции: Апр. 2008 Откуда: Россия
сам адрес http://сайт/index.php?kurs=2
Но ничего не происходит, если написать какую нибудь бредятину- ошибку выдает.
Хостинг бесплатный, не знаю в чем прикол
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.