Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Пытаюсь составить правило для mod_rewrite., Отдельное правило для каждого get-запроса
Necrosss  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 43010
На форуме: 6 месяцев, 4 дня
Карма:




Работаю с чем-то вроде простенького интернет-магазина. Как у любого магазина у него есть сортировка товаров по разным параметрам. (По цене, по материалу, по длине/ширине и т.д.)
Реализовать это в виде обычных 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.

Буду рад если кто-нибудь подскажет как можно починить.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 20 дней
Карма: 7




Нет, так работать не будет для такой ссылки, это надо отдельное правило.

Я так понимаю такая ссылка
ht tp://localhost/test/price_1000/material_дерево/length_10/width_5/

Формируется из GET вот так
ht tp://localhost/test/index.php?price=price_1000&material=material_дерево&length=length_10&width=width_5

Если да, то правило будет выглядеть примерно так
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/(.*)/(.*)/(.*)(/?)+$ index.php?price=$1&material=$2&length=$3&width=$4 [NC,L,QSA]

Для каждой ссылки нужно прописывать отдельное правило

Если один GET параметр типа
ht tp://localhost/test/index.php?price=price_1000

То правило будет выглядеть примерно вот так
RewriteRule ^(.*)(/?)+$ index.php?price=$1 [NC,L,QSA]


Если хочешь чтоб ссылка была вида что-то.html то нужно прописать вот так
RewriteRule ^(.*).html(/?)+$ index.php?price=$1 [NC,L,QSA]

Тогда ссылка у тебя получится вида ht tp://localhost/test/price_1000.html

Но заметь, что я показываю пример если точка входа единая, это index.php
Если у каждого GET параметра своя точка входа, прописывать правило
нужно по другому


Если у тебя в ссылке два GET параметра, то правило будет отдельное
к примеру такая ссылка
ht tp://localhost/test/price_1000/material_дерево

То правило будет примерно вот такое
RewriteRule ^(.*)/(.*)(/?)+$ index.php?price=$1&material=$2 [NC,L,QSA]


Ну вот что то вроде этого

Знак (/?) означает, что после той ссылки можно передать GET параметр
к примеру
ht tp://localhost/test/price_1000/material_дерево/length_10/width_5?get=параметр

Можно вместо знаков (/?)+$ поставить просто $ это
будет означать конец строки

Пробуй что получается
_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 20 дней
Карма: 7




Цитата
(а если кто-то захочет поискать только по цене или только по длине ?)
Тогда нужно много RewriteRule для каждого параметра по отдельности.


Не для каждого параметра, а для каждой разной ссылки с get параметрами,
Если в ссылке 1 параметр, то это одно правило
Если 2 параметра то это уже другое правило

Вот опять же приведу пример

У тебя есть 2 ссылки с get параметрами типа
ht tp://localhost/test/index.php?price=price_1000
и
ht tp://localhost/test/index.php?price=price_1000&material=material_дерево

Ты, к примеру, решил из этих ссылок сделать вот такие ЧПУ
ht tp://localhost/test/price_1000
и
ht tp://localhost/test/price_1000/material_дерево

Тогда правило будет выглядеть примерно вот так
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)(/?)+$ index.php?price=$1 [NC,L,QSA]

RewriteRule ^(.*)/(.*)(/?)+$ index.php?price=$1&material=$2 [NC,L,QSA]


_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Necrosss  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 2
Пользователь №: 43010
На форуме: 6 месяцев, 4 дня
Карма:




Спасибо, буду пробовать.

Правда 1 момент:
Цитата
Формируется из GET вот так
ht tp://localhost/test/index.php?price=price_1000&material=material_дерево&length=length_10&width=width_5


По задумке так:
ht tp://localhost/test/index.php?price=1000&material=дерево&length=10&width=5
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса