Реклама на сайте Advertise with us

_GET и ЧПУ

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 20/07/08 в 18:55       Ответить с цитатойцитата 

в общем урлы сайта имеют вид
site.com/category/subcategory/
в индексе REQUEST_URI разбирается и собирается страница
но вот как передать параметром непременно в адресной строке?
вид site.com/category/subcategory/?var=1 не работает
в $_GET пусто

крипта на ByBit

0
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 20/07/08 в 19:33       Ответить с цитатойцитата 

Ну да, поправь в правиле регу , чтобы получалось :
site.com/category/subcategory/var/1/

и тогда все у тебя будет.

8
 



С нами с 19.03.07
Сообщения: 129
Рейтинг: 69

Ссылка на сообщениеДобавлено: 21/07/08 в 01:08       Ответить с цитатойцитата 

Может быть это?
$_SERVER["QUERY_STRING"]

:)

0
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 21/07/08 в 06:25       Ответить с цитатойцитата 

передает только path=user/25/privates/add/
?var=1
игнорит
нужно сделать передачу переменных для поиска
то есть search/?q=key&q2=key2
так и придется парсить REQUEST_URI

крипта на ByBit

0
 

« ... 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


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 21/07/08 в 09:34       Ответить с цитатойцитата 

бери REQUEST_URI переменную и парси самостоятельно в начале скрипта. Иначе в mod_rewrite только правила описывать

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 21/07/08 в 11:12       Ответить с цитатойцитата 

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

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 21/07/08 в 14:35       Ответить с цитатойцитата 

В .htaccess какое правило ?
Можно в RewruteRule в конец добавить [QSA] , но это потенциальная дырка в безопасности.

0
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 21/07/08 в 15:17       Ответить с цитатойцитата 

не хочу трогать htaccess
буду распарсивать

крипта на ByBit

0
 



С нами с 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 icon_smile.gif Есть так же супер-фреймворк как раз для новичков или для ленивых icon_smile.gif Называется CakePHP (http://www.cakephp.org/) Просто глянь сюда http://manual.cakephp.org/view/219/blog - на этой странице размещён код примитивного блога. Там кстати тоже сделан ЧПУ.

Это как JQuery для JavaScript - тоже, пересев на него ты уже никогда не захочешь соскочить на написание килобайтов кода, которые в JQuery делаются парой строк.

Но зачему, что фреймворки очень удобны именно для больших проектов. Если надо написать какую-нибудь утилиту, какой-нибудь консольный парсер, то с фреймворком такая задача будет более геморна в исполнении.

создай свою партнёрку

8
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 21/07/08 в 17:47       Ответить с цитатойцитата 

да согласен.
но это скорее переписывание текущего проекта
перетаскивать на фреймворк нет времени тупо, да и библиотеки уже написаны все, просто фишки дописываю , да натягиваю новый дизайн
а пишу я здесь, потому что помогают быстро icon_smile.gif

крипта на ByBit

0
 



С нами с 03.05.07
Сообщения: 801
Рейтинг: 825

Ссылка на сообщениеДобавлено: 21/07/08 в 18:06       Ответить с цитатойцитата 

Тогда попробую ответить по существу icon_smile.gif

На самом деле, немного неясно, что ты хочешь. Если у тебя урл вида 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

Хз, может это как-то поможет, т.к. я не совсем понял суть проблемы

создай свою партнёрку

8
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 21/07/08 в 20:32       Ответить с цитатойцитата 

Из второго примера жить будет четь лучьше если
explode('_',$val) заменить на explode('_',$val,2)

Но всё-равно второй пример просто в учебник можно включить.
В раздел как нельзя писать на PHP

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 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...

создай свою партнёрку

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 22/07/08 в 00:48       Ответить с цитатойцитата 

CJLOG писал:
Спасибо за useless-поправку. Особенно, если учесть, что значение может быть строковое и в нём тоже может содержаться символ "_".

Для того и нужен третий параметр.

0
 



С нами с 03.05.07
Сообщения: 801
Рейтинг: 825

Ссылка на сообщениеДобавлено: 22/07/08 в 00:55       Ответить с цитатойцитата 

А тут ступил чё-то, подумал что наоборот icon_smile.gif Бывает.

создай свою партнёрку

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 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" icon_smile.gif

создай свою партнёрку

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 22/07/08 в 16:11       Ответить с цитатойцитата 

http://www.site.com/news/var1_1/var2_2/var3_3/
http://www.site.com/news/1-2-3/
какой из таких адресов будет удобнее ? icon_smile.gif

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 22/07/08 в 16:28       Ответить с цитатойцитата 

Stek писал:
http://www.site.com/news/var1_1/var2_2/var3_3/
http://www.site.com/news/1-2-3/
какой из таких адресов будет удобнее ? icon_smile.gif


хм... смотря в сторону сео, думаю первый выгоднее... или нет?

0
 



С нами с 03.05.07
Сообщения: 801
Рейтинг: 825

Ссылка на сообщениеДобавлено: 22/07/08 в 17:05       Ответить с цитатойцитата 

Stek писал:
http://www.site.com/news/var1_1/var2_2/var3_3/
http://www.site.com/news/1-2-3/
какой из таких адресов будет удобнее ? icon_smile.gif

Удобнее для кого? Для htaccess, для парсинга через php, для сео? Если у тебя количество и порядок переменных постоянны, то второй вариант проще действительно сделать через 1-2 правила в htaccess. Но обычно люди увлекаются и начинают перечислять в htaccess все возможные комбинации параметров, дико нагружая этим апач. Щас вот наконец-то увидел исходники Clip-Share - у него там в .htaccess около 100 RewriteRule. Я считаю, что это пиздец, мягко говоря. Это апач должен при каждом заходе применять до 100 регулярных выражений!

А первый вариант я придумал на ходу, как универсальное решение. Сам не юзал его, но считаю его интересным для какой-нибудь CMS, где может быть много различных комбинаций параметров в урлах, и наверно заюзаю где-нибудь. Главное соблюдать секюрность.

создай свою партнёрку

0
 



С нами с 11.06.03
Сообщения: 1266
Рейтинг: 950


Передовик Master-X (01.01.2008)
Ссылка на сообщениеДобавлено: 22/07/08 в 20:03       Ответить с цитатойцитата 

В детстве я юзал оба варианта. А первый вариант щас много кто юзает. Тот же вордпресс.

Действительно правильно будет парсить скриптом. Ибо упрощает .htaccess
Можно конечно использовать внешний парсер для RewriteRule, но зачем для очень связанных задач использовать две технологии ?

0
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 24/07/08 в 18:54       Ответить с цитатойцитата 

+1 за ZF - всё уже написанно.
Сайт русского комьюнити zendframework.ru

З.Ы. Кстати, там тоже парсинг проходит скриптами, а не в .htaccess

True хостинг

0
 



С нами с 01.03.07
Сообщения: 304
Рейтинг: 223

Ссылка на сообщениеДобавлено: 25/07/08 в 05:21       Ответить с цитатойцитата 

zend хорошо для небольших или средних проектах где надо быстро написать , а там где надо например postgres или поиск релевантный по 100 мб базе подключать там уже не до zend , ИМХО

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »