programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 20/07/08 в 18:55 |
в общем урлы сайта имеют вид
site.com/category/subcategory/
в индексе REQUEST_URI разбирается и собирается страница
но вот как передать параметром непременно в адресной строке?
вид site.com/category/subcategory/?var=1 не работает
в $_GET пусто
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 20/07/08 в 19:33 |
Ну да, поправь в правиле регу , чтобы получалось :
site.com/category/subcategory/var/1/
и тогда все у тебя будет.
|
|
|
|
С нами с 19.03.07
Сообщения: 129
Рейтинг: 69
|
Добавлено: 21/07/08 в 01:08 |
Может быть это?
$_SERVER["QUERY_STRING"]
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 21/07/08 в 06:25 |
передает только path=user/25/privates/add/
?var=1
игнорит
нужно сделать передачу переменных для поиска
то есть search/?q=key&q2=key2
так и придется парсить REQUEST_URI
|
|
|
|
« ... full on ... »
С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686
|
Добавлено: 21/07/08 в 07:02 |
Sterx:
Если не передаются параметры, то в правилах mod_rewrite это не описано. Покажи код, так проще понять и сделать будет.
|
|
Power of the lime madness...
|
0
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 21/07/08 в 09:34 |
бери REQUEST_URI переменную и парси самостоятельно в начале скрипта. Иначе в mod_rewrite только правила описывать
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
php
С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410
|
Добавлено: 21/07/08 в 11:12 |
вытащи регуляркой. я всегда так делаю когда глобальный массив бывает сложно или невозможно заполнить.
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 21/07/08 в 14:35 |
В .htaccess какое правило ?
Можно в RewruteRule в конец добавить [QSA] , но это потенциальная дырка в безопасности.
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 21/07/08 в 15:17 |
не хочу трогать htaccess
буду распарсивать
|
|
|
|
С нами с 03.05.07
Сообщения: 801
Рейтинг: 825
|
Добавлено: 21/07/08 в 17:42 |
Я смотрю ты здесь очень часто задаёшь вопросы. Ты таким образом учишь язык, или же у тебя какой-то (судя по кол-ву вопросов большой) проект, который ты пишешь, но постоянно сталкиваешься с трудностями в релизации тех или иных вещей? Просто если второе (я сам так учил php), то могу предостечерь от ошибок, посоветовав, как сразу начать грамотно писать. А в наше время писать грамотно - это заморачиваться с кодом по минимуму, возлогая всё на доп. библиотеки - фреймворки, в которых уже всё продуманно за тебя.
Мне показалось, что ты пишешь что-то типа движка блога или чего-то подобного, где применяется много разных технологий и методов. Если так, то погляди возможности того же Zend Framework (http://framework.zend.com) С помощью него ты сможешь сделать в принципе любое приложение, т.к. там уже давно сделан мощный шаблонизатор и реализованны методы работы с юзерами, с базой данных, с обработкой форм, с сессиями, работа с конфигом, с поиском, с rss и фидами, система сообщений и емейлов, логи, дебаг, многоязычность и т.п. Всего не перечислить.
Вот то что ты щас спрашиваешь (про ЧПУ), делается через класс Zend Controller. Вот пример http://framework.zend.com/manual/ru/zend.controller.router.html
Zend Framework больше для профи, там сложная архитектура - т.е. этот фреймворк нужно изучать на равне с php Есть так же супер-фреймворк как раз для новичков или для ленивых Называется CakePHP (http://www.cakephp.org/) Просто глянь сюда http://manual.cakephp.org/view/219/blog - на этой странице размещён код примитивного блога. Там кстати тоже сделан ЧПУ.
Это как JQuery для JavaScript - тоже, пересев на него ты уже никогда не захочешь соскочить на написание килобайтов кода, которые в JQuery делаются парой строк.
Но зачему, что фреймворки очень удобны именно для больших проектов. Если надо написать какую-нибудь утилиту, какой-нибудь консольный парсер, то с фреймворком такая задача будет более геморна в исполнении.
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 21/07/08 в 17:47 |
да согласен.
но это скорее переписывание текущего проекта
перетаскивать на фреймворк нет времени тупо, да и библиотеки уже написаны все, просто фишки дописываю , да натягиваю новый дизайн
а пишу я здесь, потому что помогают быстро
|
|
|
|
С нами с 03.05.07
Сообщения: 801
Рейтинг: 825
|
Добавлено: 21/07/08 в 18:06 |
Тогда попробую ответить по существу
На самом деле, немного неясно, что ты хочешь. Если у тебя урл вида site.com/category/subcategory/?var1=1&var2=2&var3=3, то что у тебя делает скрипт и что делает mod_rewrite? т.е. в каком виде подобная строка передаётся скрипту и что надо вытащить из этой строки?
На всякий случай приведу пример, как делать простой ЧПУ. Если у тебя урл типа domain.com/var1/var2/var3 (т.е. чётко заданный порядок переменных), то решение:
Адрес вида domain.com/1/2/3
Код: |
list($var1,var2,var3)=explode("/",$_SERVER["QUERY_STRING"]);
|
Таким образом, в $var1 будет 1, в $var2 будет 2 и т.п.
Так же ты можешь передавать в адресной строке ещё и переменные (если урл формируется динамически и какие-то переменные надо опустить):
Адрес вида domain.com/var1_1/var2_2/var3_3 (знак "_" можно заменить на что угодно, надо только поправить второй explode)
Код: |
foreach (explode("/",$_SERVER["QUERY_STRING"]) as $val)
{
list($l,$r)=explode("_",$val);
$tmp[$l]=$r;
}
extract($tmp);
|
Таким образом у тебя, опять же, $var1 будет 1, в $var2 будет 2 и т.п. ;) Но это я описал скорее как бонус. Вдруг кому пригодится. Главное передавать правильно параметры. Т.е. если скипт называется index.php, то mod_rewrite должен делаеть такое перенаправление: index.php?var1_1/var2_2/var3_3
Хз, может это как-то поможет, т.к. я не совсем понял суть проблемы
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 21/07/08 в 20:32 |
Из второго примера жить будет четь лучьше если
explode('_',$val) заменить на explode('_',$val,2)
Но всё-равно второй пример просто в учебник можно включить.
В раздел как нельзя писать на PHP
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 21/07/08 в 20:57 |
нафига вы вообще мутите с explode, когда можно использовать parse_str функцию, специально предназначенную для вытягивания параметров в массив.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
С нами с 03.05.07
Сообщения: 801
Рейтинг: 825
|
Добавлено: 21/07/08 в 22:11 |
Sha писал: | Из второго примера жить будет четь лучьше если
explode('_',$val) заменить на explode('_',$val,2)
Но всё-равно второй пример просто в учебник можно включить.
В раздел как нельзя писать на PHP |
Спасибо за useless-поправку. Особенно, если учесть, что значение может быть строковое и в нём тоже может содержаться символ "_".
Пока кто-то будет что-то включать в учебники, кто-то будет писать софт ;) Интересно было бы взглянуть на ошибку. Возьму на заметку, если что. Тут уже без побъёба. Только про extract не надо - вставил его для изащности кода. Если нужна секюрность, то можно создать массив с допустимыми именами переменных, передаваемых в QUERY_STRING, или просто заюзать тип EXTR_SKIP. Но тут про секюрность не было вопроса.
Цитата: | нафига вы вообще мутите с explode, когда можно использовать parse_str функцию, специально предназначенную для вытягивания параметров в массив. |
Скажи пожалуйста, при чём тут вообще parse_str. Вернее, вытяни пожалуйста с помощью этой функции все переменные и их значения из строки "var1_1/var2_2/" Действительно, чего это все мутят explode...
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 22/07/08 в 00:48 |
CJLOG писал: | Спасибо за useless-поправку. Особенно, если учесть, что значение может быть строковое и в нём тоже может содержаться символ "_".
|
Для того и нужен третий параметр.
|
|
|
|
С нами с 03.05.07
Сообщения: 801
Рейтинг: 825
|
Добавлено: 22/07/08 в 00:55 |
А тут ступил чё-то, подумал что наоборот Бывает.
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 22/07/08 в 13:37 |
CJLOG: а RewriteRule в таком случае зачем придумано ?
Имхо не есть гуд идея, вешать все на один файл и в нем парсить на параметры.
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
С нами с 03.05.07
Сообщения: 801
Рейтинг: 825
|
Добавлено: 22/07/08 в 14:17 |
Stek писал: | CJLOG: а RewriteRule в таком случае зачем придумано ?
Имхо не есть гуд идея, вешать все на один файл и в нем парсить на параметры. |
Так человек выше сказал, что не хочет лишний раз теребить htaccess. Во-вторых, я описал "универсальный" алгоритм, при котором в htaccess ставится одна запись, а всё остальное возлагается на скрипт.
Вынужден не согласиться с тем, что всё надо хранить в htaccess. Я проводил тесты и выяснял, что htaccess на сложных регулярках очень сильно тупит и даже на небольшом трафе апач очень сильно нагибается. Именно по этому почти в кажом фреймворке встроен класс, который с лёгкостью конвертит ЧПУ в php-переменные. У меня в софте тоже юзается подобный класс. И всё потому, что он проще и главное быстрее. А когда у тебя в htaccess километровые записи с регулярками - это моветон.
Да и вообще я очень сложно себе представляю запись в htaccess, которая преобразовала бы "/var1_1/var2_2/var3_3" в "var1=1&var2=2&var3=3"
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 22/07/08 в 16:11 |
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 22/07/08 в 16:28 |
хм... смотря в сторону сео, думаю первый выгоднее... или нет?
|
|
|
|
С нами с 03.05.07
Сообщения: 801
Рейтинг: 825
|
Добавлено: 22/07/08 в 17:05 |
Удобнее для кого? Для htaccess, для парсинга через php, для сео? Если у тебя количество и порядок переменных постоянны, то второй вариант проще действительно сделать через 1-2 правила в htaccess. Но обычно люди увлекаются и начинают перечислять в htaccess все возможные комбинации параметров, дико нагружая этим апач. Щас вот наконец-то увидел исходники Clip-Share - у него там в .htaccess около 100 RewriteRule. Я считаю, что это пиздец, мягко говоря. Это апач должен при каждом заходе применять до 100 регулярных выражений!
А первый вариант я придумал на ходу, как универсальное решение. Сам не юзал его, но считаю его интересным для какой-нибудь CMS, где может быть много различных комбинаций параметров в урлах, и наверно заюзаю где-нибудь. Главное соблюдать секюрность.
|
|
|
|
С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950
|
Добавлено: 22/07/08 в 20:03 |
В детстве я юзал оба варианта. А первый вариант щас много кто юзает. Тот же вордпресс.
Действительно правильно будет парсить скриптом. Ибо упрощает .htaccess
Можно конечно использовать внешний парсер для RewriteRule, но зачем для очень связанных задач использовать две технологии ?
|
|
|
|
С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090
|
Добавлено: 24/07/08 в 18:54 |
+1 за ZF - всё уже написанно.
Сайт русского комьюнити zendframework.ru
З.Ы. Кстати, там тоже парсинг проходит скриптами, а не в .htaccess
|
|
|
|
С нами с 01.03.07
Сообщения: 304
Рейтинг: 223
|
Добавлено: 25/07/08 в 05:21 |
zend хорошо для небольших или средних проектах где надо быстро написать , а там где надо например postgres или поиск релевантный по 100 мб базе подключать там уже не до zend , ИМХО
|
|
|
|