Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mod Rewrite - конкретный пример с заменой URL, Не знаю, как сделать правильно подмену 
V
    Опции темы
linuxoid
Дата 16.4.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте друзья! У меня следующий вопрос, с которым я пока не могу разобраться:

Допустим я сделаю кнопку с таким линком. Когда пользователь нажмет её, на экране в URL'e он увидит линк:
Код

http://www.example.com/ru/produkcija/parent_sekcija/nazvanie_sekcii/


А подмена должна быть на этот линк: 
Код

http://www.example.com/?item=126&section_id=39&language=ru


Т.е. 
- "ru" говорит нам, что в конце реального линка будет "language=ru"
- по "produkcija" мы получаем item=126 (название раздела)
- по "nazvanie_sekcii" получаем "section_id=39"
- а "parent_sekcija" в данном случае нужна была для более подробной информации в читабельном url'e и роли в 
воссоздании реального url'a не играет.

Т.е. я всегда знаю, что за 1м slash'ом идет язык (ru, en), за вторым идет название раздела(, далее, если это раздел продукции, то идет название продукта первого уровня, второго уровня и т.д. в зависимости от кол-ва вложенных секций..., но всегда нужно смотреть только за последним slash'om, т.к. интересует только последний продукт, который даст section_id по "nazvanie_sekcii")

Как это сделать с помощью mod_rewrite??? Я нашел, как поменить к примеру page=example на page/example, но в 

данном случае еще нужно выбрать язык и использовать значения нескольких переменных через &.

P.S. У меня практически нулевой опыт в таких делах..., поэтому буду крайне признателен за подсказаньки.


Это сообщение отредактировал(а) linuxoid - 16.4.2010, 14:35
PM MAIL   Вверх
bars80080
Дата 16.4.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



вопросы по mod_rewrite спрашивают в администрировании серверов. здесь всё-таки пхп

но я лично не думаю, что нужен именно mod_rewrite разбирательство. почему это не сделать на пхп?
редиректим всегда на index.php, а в нём уже разбираем как душе угодно

Код

$arr = explode('/', $_SERVER['REQUEST_URI']);


вот весь путь в массиве по частям. $arr[0] - это язык, $arr[count($arr) - 1] - последний продукт
PM MAIL WWW   Вверх
linuxoid
Дата 17.4.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо! Попробую так!
PM MAIL   Вверх
capitan
Дата 20.4.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

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



bars80080,  Не совсем правильное решение редиректить все на index.php  Возникнут проблемы с seo, т.к. на любой урл будет получен 301 редирект. И потом как таким образом обрабатывать POST запросы?

Это сообщение отредактировал(а) capitan - 20.4.2010, 18:07
PM MAIL WWW ICQ   Вверх
skyboy
Дата 20.4.2010, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



capitan, хоть mod_rewrite и умеет делать редиректы([R=301] после правила), но в данном случае, я уверен, bars80080 просто некорректно назвал подмену "редиректом".
linuxoid, у тебя вариантов немного. и лучшего, чем предлагает bars80080 я тоже не могу предложить.
потому что mod_rewrite работает с запрошенным URI как с текстом. потому сделать подмену с 
Цитата(linuxoid @  16.4.2010,  13:31 Найти цитируемый пост)
http://www.example.com/ru/produkcija/parent_sekcija/nazvanie_sekcii/

на 
Цитата(linuxoid @  16.4.2010,  13:31 Найти цитируемый пост)
http://www.example.com/?item=126&section_id=39&language=ru

получится, только если явно прописать правило для секции "nazvanie_sekcii". и для всех остальных секций - тоже прописать явно правила в .htaccess
 а вот если все адреса будут вызывать index.php, в котором уже может происходить обращение к БД, для выяснения, что за id у секции с заданным названием, то все будет намного проще и короче.
PM MAIL   Вверх
bars80080
Дата 20.4.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(capitan @  20.4.2010,  17:59 Найти цитируемый пост)
Возникнут проблемы с seo, т.к. на любой урл будет получен 301 редирект. И потом как таким образом обрабатывать POST запросы?

Цитата(skyboy @  20.4.2010,  18:23 Найти цитируемый пост)
просто некорректно назвал подмену "редиректом".

да. в консерваториях не учился, терминологии не обучен. однако, всё работает корректно, без 301 редиректов (кроме специальных, именно для seo. к примеру, чтоб редиректило 301 с server.ru/some на server.ru/some/ ) и все POST-данные тоже корректно обрабатываются

собственно, вот он:

Код

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

в корневике, и всё
PM MAIL WWW   Вверх
skyboy
Дата 20.4.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(bars80080 @  20.4.2010,  17:58 Найти цитируемый пост)
да. в консерваториях не учился

да ладно, при чем тут "консерватории"? неужто по-твоему "редирект" и "подмена URL" - суть одно и то же?
PM MAIL   Вверх
bars80080
Дата 20.4.2010, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



до сих пор различий не делал. точнее не пользовался выражением "подмена урл"

в интернете распространено множество статьей с текстами "как сделать то-то или то-то". но практически нет базовых принципов, академического знания, как в учебнике. а если есть, то на английском, в коем скрадываются все нюансы в одну серую массу
PM MAIL WWW   Вверх
linuxoid
Дата 20.4.2010, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо коллеги. bars80080 дал мне отличный совет. Все работает, как я и хотел... в mod_rewrite'e я прописал, чтобы все линки по типу 
Код

http://www.example.com/cat/subcat/product/
Код

http://www.example.com/cat/product
Код

http://www.example.com/cat/
 и т.д. кроме 
Код

http://www.example.com/admin/
 вели бы на главную страницу index.php. Далее просто сделал функцию, которая обрабатывает такие линки и по названию определяет все параметры реального линка. В общем это решение проблемы. Спасибо!
PM MAIL   Вверх
capitan
Дата 20.4.2010, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

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



А кто-нибудь пробовал такой вариант?
http://www.shtogrin.com/library/web/mod_re...oc/RewriteRule/

Цитата

Пример:

Мы хотим преобразовать URL вида

/ Language /~ Realname /.../ File

в

/u/ Username /.../ File . Language

Мы берем файл, содержащий ассоциативный массив для преобразований, приведённый выше и сохраняем его под именем /path/to/file/map.txt. Затем, нам нужно только добавить следующие строчки в конфигурационный файл сервера Apache:

RewriteLog   /path/to/file/rewrite.log
RewriteMap   real-to-user               txt:/path/to/file/map.txt
RewriteRule  ^/([^/]+)/~([^/]+)/(.*)$   /u/${real-to-user:$2|nobody}/$3.$1


Просто интересен опыт.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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