Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

mod_rewrite без границ

2.8K
15 октября 2006 года
Unglued
119 / / 15.09.2005
есть урл вида - http://www.site.ru/index.php?val1=1&val2=1&dist=555

Задача: сделать с этого редирект на http://www.site.ru/index/555 (это просто), но приэтом, чтобы http://www.site.ru/index/555 ссылался именно на http://www.site.ru/index.php?val1=1&val2=1&dist=555.

Соответственно если будет допустим так:
http://www.site.ru/index.php?val1=5&val2=7&dist=555, то опять редирект на http://www.site.ru/index/555,но в данном случае эта ссылка должна указывать на http://www.site.ru/index.php?val1=5&val2=7&dist=555.

Помогите люди дорбрые, с mod_rewrite знаком, но не достаточно, чтобы придумть как осуществить такую затею.
7.3K
15 октября 2006 года
JB13
64 / / 05.09.2005
[QUOTE=Unglued]
Соответственно если будет допустим так:
http://www.site.ru/index.php?val1=5&val2=7&dist=555, то опять редирект на http://www.site.ru/index/555,но в данном случае эта ссылка должна указывать на http://www.site.ru/index.php?val1=5&val2=7&dist=555.
[/QUOTE]

Из серии, найди 10 отличий :) Обьясни по понятнее, а то что-то я никак не пойму, что и куда должно редиректить.
2.8K
16 октября 2006 года
Unglued
119 / / 15.09.2005
ссылка №1 - http://www.site.ru/index.php?val1=1&val2=1&dist=555
ссылка №2 - http://www.site.ru/index.php?val1=5&val2=7&dist=555

Отличия 2:
№1 - val1 = 1, val2 = 1;
№2 - val1 = 5, val2 = 7.

Однако в адресной строке браузера в обоих случаях дожна быть сылка вида http://www.site.ru/index/555. В первом случае эта ссылка должна вести на http://www.site.ru/index.php?val1=1&val2=1&dist=555, а во втором случа на http://www.site.ru/index.php?val1=5&val2=7&dist=555.

Говоря простым языком я хочу чтобы ссылка в адресной строке браузера принимала свою форму в завсимости от параметра dist, однако ссылалась на страницу, опирируя параметрами val1 и val2.
15
16 октября 2006 года
shaelf
2.7K / / 04.05.2005
2Unglued
А ты хорошо подумал? Просто эти параметры передают GET, и это в свою очередь значит, что ты их просто не получишь на index.php. Всё, что ты там увидешь, это $_GET['dist']. Если тебе большего не нужно, так не делай их просто в URL.
2.8K
16 октября 2006 года
Unglued
119 / / 15.09.2005
}{mm...
Не много не понял.

mod_rewrite может же переделать http://www.site.ru/index.php?val1=1&val2=1&dist=555 в http://www.site.ru/index/555. А уже http://www.site.ru/index/555 сделать как:
RewriteRule ^(.*)index.*\/(.*)$ $1/index.php?val1=1&val2=1&dist=$2

Но тут не понятно, как дать понять правилу какие значения ставить в val1 и val2.
7.3K
17 октября 2006 года
JB13
64 / / 05.09.2005
mod_rewrite не меняет ничего в адресной строке браузера, а работает на уровне файловой системы сервера. т.е.
Цитата:

Говоря простым языком я хочу чтобы ссылка в адресной строке браузера принимала свою форму в завсимости от параметра dist, ...


нужно реализовывать не через mod_rewrite.

исходя из каких условий должны назначаться val1 и val2?

зачем менять http://www.site.ru/index.php?val1=1&val2=1&dist=555 на http://www.site.ru/index/555, а потом обратно. в таком случае тебе сразу нужно делать ссылки вида

 
Код:
<a href="http://www.site.ru/index/555">текст</a>
и через mod_rewrite их преобразовывать в нужный тебе формат, а val1 и val2 передавать каким-нибудь другим способом. Например вместе с сессией, или если это позволяет задача, сделай ссылки вида http://www.site.ru/index/555-1-7.
2.8K
18 октября 2006 года
Unglued
119 / / 15.09.2005
есть одн поблема, с которой я и собираюсь бороться по средством mod_rewrite - я не могу просто написать <a href="http://www.site.ru/index/555">текст</a>. Скажем так, это невозможно.
Цитата:
mod_rewrite не меняет ничего в адресной строке браузера, а работает на уровне файловой системы сервера. т.е.


это я прекерасно понимаю. Я образно выразился.
скажем для обычного юзера
RewriteRule ^index.htm$ index.php [R]
это будет выглядеть именно так, как будно адрес поменялся в адресной строке.

7.3K
18 октября 2006 года
JB13
64 / / 05.09.2005
Так как происходит редирект и .htaccess после него запускается снова, то val1 и val2 нужно передавать, либо через GET (я писал ниже), либо сохранять в кукисах у пользователя. По другому видимо никак :confused:
2.8K
19 октября 2006 года
Unglued
119 / / 15.09.2005
ВО! то что надо!
Как через GET передать val1 и val2 файлу .htaccess? Через переменную окружения ENV? Можно маленький примерчик?
7.3K
20 октября 2006 года
JB13
64 / / 05.09.2005
Я имел в виду наверное, немного другое.

т.е. чтобы ссылка была не http://site.ru/index/555, а например http://site.ru/index/555-7-1, где 7 и 1 это val2 и val1, тогда в .htaccess пишешь, что-то типа этого

 
Код:
RewriteRule ^([0-9]+)-([0-9]+)-([0-9]+)$ /index.php?val1=$3&val2=$2&dist=$1 [L]


ну и соответсвенно на оборот

 
Код:
RewriteCond %{QUERY_STRING} val1=(.+)&val2=(.+)&dist=(.+)
RewriteRule ^index.php$ /index/%3-%2-%1? [R,L]
2.8K
26 октября 2006 года
Unglued
119 / / 15.09.2005
Это уже ближе, но этот вариант я уже обмозговывал. Он не подходит.

Надо именно чтобы в разный момент времени, для разных пользователей ссылка ...555 вела на страницы с различными val2 и val1.

Вариант с 555-7-1 не подходит, т.к. на самом деле http://www.site.ru/index.php?val1=1&val2=1&dist=555 лишь коротенький пример. Переменных там четко на 250 символов. POST-запрос не предлагать.
2.8K
26 октября 2006 года
Unglued
119 / / 15.09.2005
Алгоритм я предпологаю следующий.
1. Пользователь вводит http://www.site.ru/index.php?val1=1&val2=1&dist=555
2. Срабатывает RewriteRule [R] на http://site.ru/index/555 (при этом сохроняет где-то переменные val2 и val1)
3. Срабатыает RewriteRule (берутся сохраненные переменные val2 и val1 откуда-то и подстовляются в правило)

Как такой алгоритм осуществить? Основная и единственная проблема - где и как хранить переменные val2 и val1 для последующего использования их во втором RewriteRule?
7.3K
26 октября 2006 года
JB13
64 / / 05.09.2005
Фишка в том, что ты делаешь редирект, т.е. браузер создает новое соединение и соответсвенно с помощью mod_rewrite ты переменные сохранить не сможешь. Если не POST, то только cookie. В mod_rewrite, кстати с куки можно прямо через него работать. Вообще создай сессию и не мучайся :)
2.8K
27 октября 2006 года
Unglued
119 / / 15.09.2005
С куками это идея. Сессия это теже куки.
Допустим если изменить алгоритм
1. Пользователь вводит http://www.site.ru/index.php?val1=1&val2=1&dist=555
2. Срабатывает RewriteRule [R] на http://site.ru/index/555 (при этом сохроняет в куках переменные val2 и val1)
3. Срабатыает RewriteRule (берутся сохраненные переменные из куков val2 и val1 и подстовляются в правило)

Так можно сделать?
И как из куков теперь взять необходимые переменные?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог