Перейти к содержимому



  • Закрытая тема Тема закрыта

ЧПУ в PHP

#1 Vialls
Vialls
  • Неактивные
  • 581 сообщений
  • Репутация: 1
3

Обновлено 09 мая 2010 - 17:22  Отправлено 28 июля 2008 - 08:26

ЧПУ в PHP

Для создания ЧПУ (человеку понятных URL) используется модуль Apache - "mod_rewrite". Он позволяет незаметно для пользователя переадресовывать с одного URL на другой.

Mod_rewrite по умолчанию идет в комплекте с сервером Apache, поэтому устанавливать его нет необходимости. Но он почти всегда выключен, поэтому его надо включить с помощью файла ".htaccess":
RewriteEngine on
Данной строкой мы включили mod_rewrite. Теперь нужно настроить перенаправление.

Допустим у нас имеется скрипт "articles.php", которому в GET параметре должно передаваться ID категории и ID статьи. Т.е.:
articles.php?category=5&article=235
Нам нужно добиться следующего вида URL:
articles/5/235.html
Для этого в конец файла ".htaccess" пишем строку:
RewriteRule ^articles/([0-9]+)/([0-9]+).html$ articles.php?category=$1&article=$2
Между символами "^" и "$" заключается регулярное выражение, которое описывает ЧПУ, в скобках идут передаваемые параметры. Далее идет страница, на которую будет перенаправляться наш ЧПУ. $1 значит первый параметр, который указан в скобках регулярного выражение, $2 - второй и т.д. Их может быть бесконечное множество.

Так-же перенаправление, может принимать разные параметры. Я знаю только, один, так как в других пока не нуждался. Этот параметр - [R], добавляется в конце условия перенаправления, т.е.:
RewriteRule ^articles/([0-9]+)/([0-9]+).html$ articles.php?category=$1&article=$2 [R]
Данный параметр предназначен для того, что бы человек видел, что происходит перенаправление. Т.е. в браузере будет заменяться адресная строка.

 

 

  • 0

#2 Xap
Xap
  • Неактивные
  • 1 520 сообщений
  • Репутация: 0

Отправлено 28 июля 2008 - 11:11

То есть это настраивается только для одного url или же если это прописать, то так будут работать все url?
  • 0

#3 Vialls
Vialls
    Topic Starter
  • Неактивные
  • 581 сообщений
  • Репутация: 1

Отправлено 28 июля 2008 - 11:12

Настраивается жестко для одного. :)
  • 0

#4 Xap
Xap
  • Неактивные
  • 1 520 сообщений
  • Репутация: 0

Отправлено 28 июля 2008 - 11:16

А вот у меня Joomla. И все url такого паршивого формата. Могу ли я как-то сделать, чтобы url были ЧПУ (все url)
  • 0

#5 Vialls
Vialls
    Topic Starter
  • Неактивные
  • 581 сообщений
  • Репутация: 1

Отправлено 28 июля 2008 - 11:42

Да, но там еще в скрипте, где-то надо править, что бы он генерировал ЧПУ ссылки, а не корявые.
  • 0

#6 Xap
Xap
  • Неактивные
  • 1 520 сообщений
  • Репутация: 0

Отправлено 28 июля 2008 - 12:10

Вообщем я так понимаю, это бесперспективно. Лучше уж ставить на Drupal или Wordpress
  • 0

#7 Vialls
Vialls
    Topic Starter
  • Неактивные
  • 581 сообщений
  • Репутация: 1

Отправлено 28 июля 2008 - 12:12

Вам решать :huh:. По идее должен быть модуль к Joomla, что-бы генерились ЧПУ ссылки. А .htaccess самому прописывать вроде. Точно не знаю, т.к. уже почти год не использую CMS (пишу свои)


  • 0

#8 FordogeN
FordogeN
  • Неактивные
  • 1 414 сообщений
  • Репутация: 0

Отправлено 20 сентября 2008 - 23:00

ЧПУ настраивается в файле .htaccess, а не в php!
Скоро возьмусь за скриптик который для контроля ЧПУ через админку...
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#9 Xap
Xap
  • Неактивные
  • 1 520 сообщений
  • Репутация: 0

Отправлено 21 сентября 2008 - 15:53

А какая нагрузка на сервак будет после Вашего скриптика?
  • 0

#10 FordogeN
FordogeN
  • Неактивные
  • 1 414 сообщений
  • Репутация: 0

Отправлено 21 сентября 2008 - 16:49

нагрузка на сервак идет только во время изменения через админку... в файл .htaccess просто будет записываться вся конфигурация ЧПУ

проще говоря - нагрузки почти ни какой.
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#11 KURT [197BD]
KURT [197BD]
  • Неактивные
  • 31 сообщений
  • Репутация: 0

Отправлено 25 ноября 2008 - 11:58

А вот у меня Joomla. И все url такого паршивого формата. Могу ли я как-то сделать, чтобы url были ЧПУ (все url)

насколько я помню в настройках Джумлы есть сеттингс "Дружественные ссылки"
а вот и ссылочка =)
  • 0

#12 Гость_AlMaster_*
Гость_AlMaster_*
  • Гости

Отправлено 11 января 2009 - 01:00

Не подскажете, как можно сделать так, что бы второй параметр был не обязательным?

т.е. к примеру код:
RewriteEngine on
RewriteRule ^([a-zA-Z_0-9]+)/([0-9])$ index.php?module=$1&id=$2

видит только ссылки по типу -
/module_name/0

а при обращении к "руут директории" модуля - условие уже не действует -
/module_name

Пускай он будет даже заносить в переменную id какое либо значение, но не игнорировать весь запрос, если последняя переменная не задана.

Заранее спасибо.
  • 0

#13 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 января 2009 - 22:15

Можно сделать с помощью двух правил
RewriteEngine on
RewriteRule ^([a-zA-Z_0-9]+)[/]?$ index.php?module=$1&id=0
RewriteRule ^([a-zA-Z_0-9]+)/([0-9])$ index.php?module=$1&id=$2

А вот выписка по поводу флагов

'last|L' (последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. Это соответствует оператору last в Perl или оператору break в языке C. Используйте этот флаг для того, чтобы не преобразовывать текущий URL другими, следующими за этим, правилами преобразований. К примеру, используйте это для преобразования корневого URL из ('/') в реальный, например, '/e/www/'

Лучше его всё же подставить к первой строке так [L]

Кстати ваши URL не практичны... А если я напишу молудь, которого нету, наобум в строке браузера? Что у вас будет?
  • 0

#14 Гость_AlMaster_*
Гость_AlMaster_*
  • Гости

Отправлено 16 января 2009 - 22:32

Спасибо за ответ, посмотрю.

Кстати ваши URL не практичны... А если я напишу молудь, которого нету, наобум в строке браузера? Что у вас будет?


Ну это только пример. А то, что модуля не будет - это дело самого скрипта, в нем проверка и вывод ошибок если что.
А Rewrite тут только ссылки преобразовывает же...

Если я что-то не так понял насчет не практичных URL, то поясните, как можно иначе? Всегда же пользователь может вписать свои данные в адресной строке , и результат который он получит зависит только от скрипта и проверок в нем.
  • 0

#15 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 17 января 2009 - 00:50

AlMaster, вы правы! Все данные нужно проверять и перепроверять. Если будете проверять и выводить ошибки, то ничего страшного не произойдет.
  • 0

#16 Troy
Troy
  • Неактивные
  • 18 сообщений
  • Репутация: 0

Отправлено 23 июля 2009 - 18:22

В php файлах генерируется ссылка на новость (к примеру) вот её надо исправлять

Мне щас больше нравится работать без GETов , урл обрабатывает роутер ,а htaccess выглядит так
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php

  • 0

#17 php-tips
php-tips
  • Неактивные
  • 4 сообщений
  • Репутация: 0

Отправлено 15 декабря 2009 - 10:03

Странное выражение "ЧПУ" - уж лучше тогда "ППУ" (программисту понятные урлы), хотя еще правильнее - "РПУ" (роботу понятные урлы)
Поясню - люди (пользователи) вообще редко смотрят на урл.
им без разницы http://www.masterweb...758-chpu-v-php/ или http://www.masterweb...owtopic-758.php

Статичные урлы нужно подсовывать роботам только ради ключевика - чтобы повысить релевантность страницы запросу.
А урлы вида /module_name/ не имеют особого смысла, ИМХО.

Подход Troy - самый правильный, поскольку дает программисту максимальную гибкость.
  • 0

#18 ZiTosS
ZiTosS
  • Неактивные
  • 5 148 сообщений
  • Репутация: 8

Отправлено 16 декабря 2009 - 23:46

php-tips, всё зависит от подхода программирования. Не сомневаюсь что с роутером работать удобно.
  • 0

#19 aspide
aspide
  • Неактивные
  • 185 сообщений
  • Репутация: 1

Отправлено 09 мая 2010 - 08:19

Сорри что поднимаю старую тему  :( . Как включить mod_rewrite в Денвере?
  • 0

#20 reaboom
reaboom
  • Неактивные
  • 40 сообщений
  • Репутация: 0

Отправлено 09 мая 2010 - 09:23

В httpd.conf раскомментируйте строку:
#LoadModule rewrite_module modules/mod_rewrite.so

  • 0

robot
robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85

Пользователь месяца
Vmir Vmir 1-й за Сентябрь
Очков активности: 60 4 темы, 8 сообщений, 2 балла репутации
ТОП самых активных за этот месяц
  • Фотография Zevss
    #1

    Zevss (domles43.ru)
    Очков активности: 22.5 3 темы, 6 сообщений, 1 балл репутации

  • Фотография vetalbon
    #2

    vetalbon
    Очков активности: 16.5 0 тем, 11 сообщений, 1 балл репутации

  • Фотография Bliolast
    #3

    Bliolast
    Очков активности: 12 0 тем, 8 сообщений, 1 балл репутации

  • Фотография BLIK
    #4

    BLIK
    Очков активности: 12 Вне конкурса за определение пользователя месяца

  • Фотография r88al0503
    #5

    r88al0503
    Очков активности: 10.5 2 темы, 1 сообщение, 1 балл репутации

  • Фотография Shelley
    #6

    Shelley
    Очков активности: 10.5 1 тема, 4 сообщения, 1 балл репутации

  • Фотография leoworker
    #7

    leoworker
    Очков активности: 9 2 темы, 0 сообщений, 1 балл репутации

  • Фотография Totti
    #8

    Totti
    Очков активности: 9 0 тем, 6 сообщений, 1 балл репутации

  • Фотография olegubs
    #9

    olegubs
    Очков активности: 7.5 1 тема, 2 сообщения, 1 балл репутации

  • Фотография r0mZet
    #10

    r0mZet (rz-style.ru)
    Очков активности: 7.5 1 тема, 2 сообщения, 1 балл репутации

  • Показать весь ТОП 10

Поддержите форум! =)
Топ 5 участников по репутации

Оформление форума – IPBSkins.ru