Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ЧПУ, Человеку понятные URL 
:(
    Опции темы
Гость_Nik
Дата 22.9.2005, 21:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У меня на сайте следущие ссылки www.*.ru/?page=abc&bukva=a&game=1232 это к примеру как сделать из них ЧПУ т.к. есть ссылки и www.*.ru/?page=feedback т.е. с одним параметром а хотелось бы чтобы первая ссылка выглядела www.*.ru/abc/a/1232 а вторая www.*.ru/feedback/
Помогите пожалуйста! Я пробовал отделять в ссылке то что не нужно функцией eregi_replace, работает но когда только к примеру www.*.ru/feedback/, а если уже www.*.ru/abc/a/1232 то проблемы.... может есть другой способ? Заранее благодарен.
  Вверх
Mal Hack
Дата 22.9.2005, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



PM ICQ   Вверх
AntonioBanderaz
Дата 22.9.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Помимо mod_rewrite можно сделать так:
Код

ЧПУ и PHP

Прислал: Дмитрий Смирнов [ 27.10.2000 @ 11:21 ]
Раздел:: [ Статьи по PHP ]



"Spectator, кстати... а вот ссылки типа http://spectator.novocybersk.ru/issues/160 это мне нравится, ОЧЕНЬ ;)))
 Напиши в следующей заметке, поподробнее, КАК ты это сделал ? ОК ?" 
- такой отзыв пришел на предыдущую заметку - я впервые сделал на "Спектаторе" ЧПУ, начиная именно со 160
 заметки. Итак, расскажу про ЧПУ и PHP. Если вы не знаете PHP, и не знаете, какие иногда страшные УРЛы бывают
 в результате его работы - дальше можно не читать. :) 

ЧПУ - это термин, придуманный командой НовоКиберска, обозначает он "Человекопонятный УРЛ". В принципе,
 ничего нового и оригинального в идее понятного УРЛа нет. Про это писал и Лебедев ( http://spectator.novocybersk.ru/issues/160 ),
 и другие дизайнеры ( http://ddd.deusexmachina.ru:8101/web/address_nav/ ). Вообще, мне всегда нравились ЧПУ
 на таких сайтах, как, например, CGI-Resources ( http://cgi.resourceindex.com/Programs_and_Scripts/ ) или Softseek ( http://www.softseek.com ). 

В общем, когда я перевел "Спектатора" на PHP, начались наезды на, мол, адреса у тебя не совсем удобны. Для тех,
 кто не знает, заметка 161 имела (бы) такой УРЛ: http://spectator.novocybersk.ru/index.php3?161. Теперь имеет
 такой: http://spectator.novocybersk.ru/issues/161. Вроде бы, стало лучше. Как это делается?.. Рассказываю по
 просьбам читателей, ботающих на Php. 

Вообще, самая первая мысль - это создавать для каждой заметки поддиректорию с соответствующим номером в
 директории issues и помещать в нее index.html, то есть сделать так, 
чтобы по адресу http://spectator.novocybersk.ru/issues/161 лежал бы реальный файл. Разумеется, так дело не пойдет ;( 

Вторая идея - прописать в фале .htaccess страницу, которая будет выдаваться при ошибке 404. 

То есть: 

------------------------------------ 

ErrorDocument 404 /index.php3 

ErrorDocument 401 /index.php3 

------------------------------------ 

Грубо говоря, пользователь набирает http://spectator.novocybersk.ru/issues/161, такая страница не найдена, и
 загружается файл index.php3. Дальше - все просто. Переменная $REQUEST_URI дает нам адрес вызываемой
 страницы (в данном случае это будет /issues/161), вывести на экран соответствующий файл - дело техники. 

Ан нет. Хорошая идея, а не работает. IE ни в какую не хочет показывать то, что надо, а вместо этого пихает свою
 стандартную страницу "404" с кучей текста. Тут я и остановился. Не то, чтобы застрял, просто лень было копать
 дальше. 

А на самом деле решалось все просто. Надо, чтобы страница, которая грузится в случае ошибки 404, изменяла бы
 код ошибки и сигналила, мол, мужик, все ОК, есть такая страница: <?php header("http/1.0 200 Ok"); ?> 

Итого: прописываем в .htaccess страницу, которая, собственно, за все отвечает (у меня это index.php3). В этой
 странице пишем php-скрипт, который работает с $REQUEST_URI, шлет заголовок "http/1.0 200 Ok" и отображает
 то, что надо. 

Пример: 

<?php header("http/1.0 200 Ok"); 

$num=$REQUEST_URI; 

$num = eregi_replace ( "/issues/", "", $num ); 

include ($num.".txt"); ?> 

P.s. Вот еще один способ сделать это по-другому ( http://spectator.novocybersk.ru/index.php3?161. ), а вот еще
 один ( http://www.sabren.com/code/php/snurk/ ).
---------------------------------
Дмитрий Смирнов( mailto:[email protected] )
Spectator ( http://spectator.ru/ )


Это сообщение отредактировал(а) AntonioBanderaz - 22.9.2005, 22:50


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Mal Hack
Дата 22.9.2005, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(AntonioBanderaz @ 22.9.2005, 23:47)
Переменная $REQUEST_URI дает нам адрес вызываемой
страницы (в данном случае это будет /issues/161)

не раз пробовал так сделать. Не будет в REQUEST_URI /issues/161. ErrorDocument равносилен редиректу на определенный файл.
PM ICQ   Вверх
AntonioBanderaz
Дата 22.9.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Ну даже не знаю, я так пробовал, будет немного по-другому если скрипт находится не в корневой папке! Ну на этот файлик мы редиректимся, далее посылаем заголовки, парсим запрос и вызываем нужный скрипт.
Добавлено @ 23:36
у меня работало.
Добавлено @ 23:39
там другая переменная за всё отвечает, через phpinfo() посмотри какая... Да я вспомнил в статье ошибка.
Добавлено @ 23:41
там другая переменная за всё отвечает, через phpinfo() посмотри какая... Да я вспомнил в статье ошибка.


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
MuToGeN
Дата 23.9.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 5
Всего: 32



Можно через AddHandler/Action, только работать будет только для второго апача. Для первого - нужно, чтоб для урла www.*.ru/123/456/qwe.html был фаил htdocs/*.ru/123/456/qwe.html, только после этого он будет передан хендлеру.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Mal Hack
Дата 23.9.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



MuToGeN а зачем такой геморрой? Причем как я понимаю, хостер не даст хандлеры переписывать...
PM ICQ   Вверх
MuToGeN
Дата 26.9.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 5
Всего: 32



Цитата(Mal @ 23.9.2005, 20:02)
MuToGeN а зачем такой геморрой? Причем как я понимаю, хостер не даст хандлеры переписывать...
Насчет переписать - не знаю, а вот насчет создать новый - пока что не встречал случая, чтоб не дал. Сам пользую собственные хендлеры для шаблонизатора, все нормально.
Да и геммороя там - от силы на 30 строк пхпшного кода.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
AkimVital
Дата 10.12.2005, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



Цитата
У меня на сайте следущие ссылки www.*.ru/?page=abc&bukva=a&game=1232 это к примеру как сделать из них ЧПУ т.к. есть ссылки и www.*.ru/?page=feedback т.е. с одним параметром а хотелось бы чтобы первая ссылка выглядела www.*.ru/abc/a/1232 а вторая www.*.ru/feedback/

На сколько я понял,
Код

RewriteEngine On
RewriteRule  ^([^/]+)/([^/]+)/([^/]+)$             /script.php?page=$1&bukva=$2&game=$3    [QSA]

Вполне сносное решение. RewriteEngine поддержвают все хостеры, кроме того пользователь никогда не узнает о существовании script.php и ЧТО ему передается через GET.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.