Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > ЧПУ


Автор: Гость_Nik 22.9.2005, 21:04
У меня на сайте следущие ссылки 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
http://vingrad.ru/WEB-SERVER-002835

Автор: AntonioBanderaz 22.9.2005, 22:47
Помимо 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:spectator@novocybersk.ru )
Spectator ( http://spectator.ru/ )

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

не раз пробовал так сделать. Не будет в REQUEST_URI /issues/161. ErrorDocument равносилен редиректу на определенный файл.

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

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

Автор: Mal Hack 23.9.2005, 20:02
MuToGeN а зачем такой геморрой? Причем как я понимаю, хостер не даст хандлеры переписывать...

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

Автор: AkimVital 10.12.2005, 11:51
Цитата
У меня на сайте следущие ссылки 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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)