Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пытаюсь составить правило для mod_rewrite. Отдельное правило для каждого get 
:(
    Опции темы
Necrosss
Дата 29.5.2016, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.5.2016

Репутация: нет
Всего: нет



Работаю с чем-то вроде простенького интернет-магазина. Как у любого магазина у него есть сортировка товаров по разным параметрам. (По цене, по материалу, по длине/ширине и т.д.)
Реализовать это в виде обычных get-переменных, прописываемых в адресной строке было не сложно. Проблема случилась когда решил перевести это всё в ЧПУ.
Написать всё это ОДНИМ правилом (то есть запихнуть все параметры в один RewriteRule) не вариант. Потому что в таком случае оно сработает только если в адрес будут вбиты все переменные сразу. (а если кто-то захочет поискать только по цене или только по длине ?)
Тогда нужно много RewriteRule для каждого параметра по отдельности.

Написал что-то типа вот этого:

RewriteRule ^price_([0-9]+)/ &price=$1
RewriteRule ^material_(.*)/ &material=$1
RewriteRule ^length_([0-9]+)/ &length=$1
RewriteRule ^width_([0-9]+)/ &width=$1
И главное правило:
RewriteRule (.*) index.php?address=qwerty$1 [QSA,L]


Файл index.php содержит следующую запись: <?php print_r($_GET); ?>

В браузере вбил следующий адрес: ht tp://localhost/test/price_1000/material_дерево/length_10/width_5/

Итак на выходе получил:

Array ( [address] => qwerty [price] => 1000/material_дерево/length_10/width_5/ )

По сути сработало только првило для price.

Буду рад если кто-нибудь подскажет как можно починить.

Это сообщение отредактировал(а) Necrosss - 29.5.2016, 03:38
PM MAIL   Вверх
ksnk
Дата 29.5.2016, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 5
Всего: 386



Несколькими способами
-- отказаться от htacess.
оставить там что-то вроде 
Код

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA]
 
и в index уже разбираться с прилетевшим REQUEST_URI 

Если сайт, внезапно, будет перенесен на площадку с nginx -навороченный htaccess станет большой проблемой. 

Если список свойств внезапно измениться, или цена будет в виде диапазона - нужно будет править не только в исходниках, но и в htaccess.

-- понять как работает htaccess.
RewriteRule XXX YYY означает, что регулярка XXX применяется к прилетевшему URI, после чего URI заменяется на YYY, от результата отрезается часть после ? и все повторятся еще и еще раз, пока замены не закончатся.
Итого осталось только понять, почему
RewriteRule ^price_([0-9]+)/ &price=$1
заменил прилетевший URI именно на тот адрес, который получился.
Скорее всего, понадобится еще почитать про флаг QSA., понять куда делась начальная и конечная часть URI после замены


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Forstrot
Дата 9.1.2017, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.1.2017

Репутация: нет
Всего: нет



Прошу прощение за легкий оффтоп, но тема отчасти соответствует и моему вопросу: какую систему безопасности и управления инфраструктурой вы посоветуете?
Работа предполагается немалая, связана с отдельно взятым производством. По перечню необходимых работ, приблизительный список здесь: https://www.konsom.ru/ 
Буду рад любой информации (как по системе, так и по рекомендации специалистов).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.1083 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.