LINUX.ORG.RU

ЧПУ на PHP

 , , , ,


0

2

Решил тут перенести свои проекты c дешевого хостинга с Апачем на VPS с nginx+php5-fpm. Но вот только загвоздочка. Все мои самописы используют апачевский .htaccess для ЧПУ и написаны на нативном ПХП без всяких там ооп, фреймворков, роутингов и прочего. Правил редиректов около сотни для каждого сайта, но структура похожая. Вот у меня встал вопрос как лучше поступить с ЧПУ. Переписать все правила на nginx или уменьшить количество правил rewrit'а, привязав все запросы к index.php, а все ЧПУ реализовать через php. Второе думаю будет правильнее, но займет больше времени и скорее всего увеличит время выдачи страниц. Сейчас сервер практически моментально выплевывает страницы и не хочется уменьшения скорости.

★★★

Ответ на: комментарий от deep-purple

> у deep-purple в примере PHP-инъекций *нет*

Ну, ессно, из-за абсолютного пути у префиксаной константы APP, да ))

ну и ещё потому что после explode(..) исчезли все '/../' :-)

user_id_68054 ★★★★★
()
Ответ на: комментарий от anonymous

при чем здесь сеошники? не шлангуй, а прочитай еще раз комментарий крона.

msgxx
()

сколько трындежа в теме вокруг да около

и почти никто не сказал ответа на вопрос ТС-а: mod_rewrite

reprimand ★★★★★
()
Ответ на: комментарий от deep-purple

ну во первых — нет — для is_file всё равно какой путь :-) — он проверит любой всё что ему подсунишь.

а во вторых — «абсолютный путь» и «канонический путь» — это же не одно и тоже! :-D

/it/is/my/file.php

и

/it/is/../my/../../../file.php

в обоих случаях у нас абсолютный путь. но во втором случае — путь не канонический.

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

но у тебя инъекции-то всё равно *нет* , ведь у тебя нельзя подсунуть «/» или «/../» :-)

user_id_68054 ★★★★★
()
Последнее исправление: user_id_68054 (всего исправлений: 1)
Ответ на: комментарий от user_id_68054

Иш ты, принял к сведению. Еси понадобится когда-нить — вспомню.

deep-purple ★★★★★
()
Ответ на: комментарий от user_id_68054

Блин, у меня такое ощущение, что я пхп только начал изучать или башка просто к вечеру не варит)) Можно поподробнее насчет «внутри файла catalog.php — уже смотри переменные $cat и $subcat»?

но потом решил отказаться от этого способа

а сейчас каким пользуешься?

zevilz ★★★
() автор топика
Ответ на: комментарий от deep-purple

тоже интересный способ. Часть страниц сразу заработала (если URI == имя пхп файла) Можно насчет вот этого подробнее «// а гет параметры через обычный $_GET»?

zevilz ★★★
() автор топика
Ответ на: комментарий от Debasher

Видел я как-то такой сайт. Не, не надо...

zevilz ★★★
() автор топика
Ответ на: комментарий от user_id_68054

Вроде бы разобрался. В коде выше небольшая ошибочка (в моем случае). В $path_parts[1] попадает не катагория, а «catalog». А в $path_parts[2] - не подкатегория, а категория. В $path_parts[3], соответственно, лежит подкатегория.

В $path попадает строка со слешем в начале. При explode в $path_parts[0] попадает пустое место. А я всю башку сломал и думал, почему 404 ошибку получаю со своими редиректами, пока var_dump($path_parts) не сделал))

zevilz ★★★
() автор топика
Ответ на: комментарий от zevilz

Вроде бы разобрался. В коде выше небольшая ошибочка (в моем случае).
В $path_parts[1] попадает не катагория, а «catalog». А в $path_parts[2] -
не подкатегория, а категория. В $path_parts[3], соответственно, лежит
подкатегория.

В $path попадает строка со слешем в начале. При explode в $path_parts[0]
попадает пустое место. А я всю башку сломал и думал, почему 404
ошибку получаю со своими редиректами, пока var_dump($path_parts) не
сделал))

прошу прощения — я просто сразу в эту тему писал код, без предварительной проверки :-)

но главное это разрбраться же

user_id_68054 ★★★★★
()

Использовать rewrite плохая идея. Должен быть один фронт контроллёр, который будет это разруливать сам.

Чтобы не мучаться с реализацией роутинга, можно подключить вот эту библиотеку например: https://github.com/nikic/FastRoute

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Тогда уж лучше вообще взять какой-нить ZF2 и не париться уже и по другим вопросам.

Кстати кто в курсе насчет ZF2? Чо там? Есь жизнь на марсе?

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от deep-purple

А лучше Symfony ^_^

Не вижу ничего плохого в том, чтобы использовать библиотеки. Это сильно экономит время. В случае, если интересно разобраться самому или ни одна из библиотек не подходит для решения задачи и т.д и т.п, то можно наговнокодить что-то своё. Впрочем, не думаю, что это нужно объяснять.

Kilte ★★★★★
()
Ответ на: комментарий от deep-purple

Не знаю, как там со вторым, говорят остаёт. В начале года анонсировали третью версию: http://habrahabr.ru/post/248609/ Судя по всему обещает быть интересным.

Kilte ★★★★★
()
Ответ на: комментарий от user_id_68054

но главное это разрбраться же

ага

Не люблю копипастить код и работать с ним, не разобравшись, как он работает)

Запнулся только на вот такой фигне. В категориях и подкатегориях есть сортировка. При сортировке URI принимает примерно вот такой вид

/catalog/cat/subcat/sort=cost&direction=asc
и такой
/catalog/cat/sort=cost&direction=asc
и нифига не работает. sort и direction не обрабатываются. Похоже и не будет, т.к. они уже не обрабатываются как get параметры и их придется дробить и запихивать в $path_parts. Правильно понял?

zevilz ★★★
() автор топика
Ответ на: комментарий от zevilz

Да, придётся парсить руками, т.к. чтобы оно обрабатывалось как QUERY_STRING нужно перед sort поставить ?

Kilte ★★★★★
()
Ответ на: комментарий от Kilte

Блин, точно с ? работает. Спасибо) А я его убирал. Конфликты с ним какие-то были давно, не вспомню уже какие.

zevilz ★★★
() автор топика

В эпоху надвигающегося SPA - ЧПУ не актуален.

Передавай все в один скрипт.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.