Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Прошу помощи по .htaccess. Переназначить параметр можно?   Найти похожие ветки 

 
AV ©   (2012-05-23 19:53) [0]

сам мало что знаю, пока читаю доку, но разобраться думаю не скоро получится..

Есть файл, есть там такая запись
RewriteCond %{QUERY_STRING} ^ACTION=check(.*)$
RewriteRule ^pay[/]*$ getbalance.php?%1 [L]

как понимаю, и как проверил
Если в параметрах строки есть Action=check, то надо запустить getbalance.php. Пробовал с ?Action=check и без, правил getbalance.php - все правильно, если есть, то выполняется getbalance.php и выдает, что там понаписано выдавать.

А надо мне что бы параметр этот поменялся. Т.е. если пользователь задает
http://ip:8000/pay?ACTION=check
выполнилось
http://ДРУГОЙ_IP?ACTION=super_check

можно так намудрить?


 
Pavia ©   (2012-05-23 20:17) [1]

Можно.  Только не спрашивай как. Сам возился день разбирался так я эту систему толком и не понял.

В первой строчки ошибка. ^ACTION=
У тебя строчка запроса начинается с http а не с ACTION поэтому шляпу писать не правильно либы без неё либы целиком с самого первого символа описываем запрос.
Лучше описать целиком так как проверка условий идет дважды вначале по Http запросу(c "http") потом по запросу к файлу в папке(без "http")

RewriteCond %{QUERY_STRING} ^http://ip:8000/(.*)ACTION=check(.*)
И RewriteRule надо целиком прописать http://ДРУГОЙ_IP/?ACTION=super_check%2


 
AV ©   (2012-05-23 21:23) [2]

Спасибо.
не, ошибки нет. Там еще стоит
RewriteEngine on
Options +FollowSymlinks
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

т.е. работает, но запускается php.
А из php делать редирект - получается, что юзер переправляется туда сам, из браузера. А доступа туда не у всех есть

т.е. надо именно туда обратится как то так
RewriteRule надо целиком прописать http://ДРУГОЙ_IP/?ACTION=super_check%2
и вернуть так, как будто это тут было выполнено

И все еще осложняется, что надо сравнивать этот экшен по регулярке(там много цифр еще может быть и букв), что бы правило срабатывало не всегда.

вот, нашлось
http://stackoverflow.com/questions/1497184/replacing-a-querystring-parameter-value-using-mod-rewrite
сегодня уже поздно - завтра день начнется с мучительного
9-30
написал/сохранил/проверил/поругался на все эти web_заморочки
написал/сохранил/проверил/поругался на все эти web_заморочки
...
написал/сохранил/проверил/поругался на все эти web_заморочки
12-30. пошел на обед
:)


 
Pavia ©   (2012-05-23 21:49) [3]


> А из php делать редирект - получается, что юзер переправляется
> туда сам, из браузера. А доступа туда не у всех есть
>

тогда  .htaccess не подходит.

Вам надо получить код страницы в php коде.


 
KSergey ©   (2012-05-23 21:57) [4]

> А надо мне что бы параметр этот поменялся. Т.е. если пользователь задает
> http://ip:8000/pay?ACTION=check
> выполнилось
> http://ДРУГОЙ_IP?ACTION=super_check

Э, погоди. Это как-то неправильно хочешь ты его использовать. Ну во всяком случае с точки зрения реврайт-руля.
Оно ведь для другого предназначено: WEB-сервер поймал запрос - и проверяет его на  RewriteRule. Если нашел подходящее - то заменяет сообразно шаблону и продолжает САМ выполнять, сам этот WEB-сервер.

А если хочется чтобы фактически выполнился запрос к совершенно дургому адресу, то

1) Прописать редирект для пользовательского браузера типа так:
# редирект plazma-service.ru -> www.plazma-service.ru
RewriteCond %{HTTP_HOST} ^plazma-service.ru
RewriteRule ^(.*)$ http://www.plazma-service.ru/$1 [R=301,L]

ну и как-то сюда прикрутить передачу оставшейся части строки с параметрами, чтобы получилась требуемая подмена на ACTION=super_check
Лень думать/экспериментироать, примеров про R=301 можно сыскать много.

но по этому условию пользователь всегда будет фактически уходить от тебя н другой адрес.

2) Внутри своего скрипта при помощи curl выпоняем нужный запрос к нужному сайту, разбираем пришедший оттуда ответ и формируем ответ для нашего пользоватля.
В этом случае с точки зрения пользователя выглядит так, что он открыл некую страницу на нашем сайте, а фактически какую-то информацию мы получили с другого. Что вполне нормально. (см. реклама яндекса/гугля, например)


 
KSergey ©   (2012-05-23 21:59) [5]

(я не виноватый что оно выделяет!!
надо было в CODE обернуть, наверное...)


 
megavoid ©   (2012-05-24 08:07) [6]

RewriteBase /
RewriteRule ^(.*)country/(.*)$ http://otherip/?country=$2

что-то типа того, может быть? замудрённый этот mod_rewrite


 
AV ©   (2012-05-24 12:01) [7]

вот так перебрасывает
RewriteCond %{QUERY_STRING} ^ACTION=payment(.*)$
RewriteRule ^pay[/]*$ http://localhost:8101/webpaystest/WebPays?ACTION=vendor [P,L,QSA]


т.е. если набираем
http://192.168.1.10:8000/pay?ACTION=payment
то строка не меняется, а вывод такой, будто набирали
http://192.168.1.10:8101/webpaystest/WebPays?ACTION=vendor


 
AV ©   (2012-05-24 12:06) [8]

теперь надо с регуляркой разобраться
если набрали
http://192.168.1.10:8000/pay?ACTION=число1число2-число3число4
надо перебросить как
http://192.168.1.10:8101/webpaystest/WebPays?ACTION=SUPER_ACTION&ADD_INFO=число1число2-число3число4

но если было
http://192.168.1.10:8000/pay?ACTION=число1число2(тут нет тире)число3число4
надо перебросить так же
http://192.168.1.10:8101/webpaystest/WebPays?ACTION=число1число2(тут нет тире)число3число4


 
KSergey ©   (2012-05-24 12:41) [9]

> AV ©   (24.05.12 12:06) [8]
> теперь надо с регуляркой разобраться

Я бы для начала
а) попробовал тот же фокус провернуть с другим хостом, а не портом. Вы ведь именно на другой IP хотите залезть, на другую совсем машину верно? как-то мне сомнительно, что оно сработает.
б) поскольку вижу слова "payment" - сильно подозреваю, что в реале работа будет по https-протоколу, а это сильно другое, там такие фокусы должны на отдельные проблемы напарываться, причем, возможно, принципиально не решаемые.


 
AV ©   (2012-05-24 12:49) [10]


> KSergey ©   (24.05.12 12:41) [9]


> а) попробовал тот же фокус провернуть с другим хостом, а
> не портом. Вы ведь именно на другой IP хотите залезть, на
> другую совсем машину верно? как-то мне сомнительно, что
> оно сработает.

Нет, тут все ок. Тут я не парюсь.
Если не будет работать - замаппирую localhost:8101 туда
если нет - перенесу сервис сюда же. Оба адреса наши, внутренние.


> б) поскольку вижу слова "payment" - сильно подозреваю, что
> в реале работа будет по https-протоколу, а это сильно другое,
>  там такие фокусы должны на отдельные проблемы напарываться,
>  причем, возможно, принципиально не решаемые.

ну да.
Но надо же попробовать хотя бы


 
KSergey ©   (2012-05-24 17:41) [11]

ой мама-мама дорогая.....
не, не буду наверное с кредитки больше платить
боязно

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


 
AV ©   (2012-05-24 18:14) [12]

ну заприкалывали, заприкалывали :)
кто же будет это все, не попробовав 150 раз, выносить из избы?

лучше подскажите
если пишу так
RewriteCond %{QUERY_STRING} ^ACTION=payment&ACCOUNT=(.....-.....)(.*)$

RewriteRule ^pay[/]*$ http://localhost:8101/webpaystest/WebPays?ACTION=payment&ACCOUNT=00000&ADD_INFO=%1%2


то получаю как и ожидаю, переданный ACCOUNT сменился на 00000, а реальное значение ушло в параметр ADD_INFO.

Вопрос. Как написать, если в строке уже есть параметр ADD_INFO  ?
причем, не понятно, на каком месте он идет в параметрах. + Его может и не быть.
Преследуется задача туда записать ACCOUNT, в начало или в конец, не имеет значение
т.е. вместо переданных
ACTION=payment&ACCOUNT=12345-12345&(может еще что-то, а может и нет)&ADD_INFO=ЧТО-ТО(а может и нет этого параметра)&(может еще что-то, а может и нет)

на другой порт ушло
ACTION=payment&ACCOUNT=00000&(может еще что-то, а может и нет, в зависимости от того, было или нет)&ADD_INFO=12345-12345+ЧТО-ТО_если_было&(может еще что-то, а может и нет, в зависимости от того, было или нет)


 
AV ©   (2012-05-24 21:15) [13]

решено
вот так надо было

RewriteCond %{QUERY_STRING} ^ACTION=payment(.*)&ACCOUNT=(\d\d\d\d\d-\d\d\d\d\d)(.*)&ADD_INFO=(.*)$
RewriteRule ^pay[/]*$ http://localhost:8101/webpaystest/WebPays?ACTION=payment&ACCOUNT=0&ADD_INFO=%2%4%1%3$1 [P,L,QSA]


а насчет

> не, не буду наверное с кредитки больше платить

это как раз наоборот - обход "впаренного" софта
Я обнуляю аккаунт, что бы платеж не прошел полюбому! (были случаи, когда из буфера оператор вставлял ИНН в поле сумма. Даже компьютер был сильно удивлен таким платежам)
т.о. любой платеж падает в "плохие", откуда его люди вручную проводят. (Возможно перезвонив клиенту, в случае особого подозрения...)


 
KSergey ©   (2012-05-24 22:11) [14]

Интересно было бы ознакомиться с полным протоколом взаимодействия.
Обычно это делается не так.
Но готов поверить, что все бывает сильно иначе чем то, что встречалось мне )
Ибо после того, как одна вроде как большая и технологически продвинутая вроде контора выдала dll с торчащими наружу дельфовыми String, а когда им сказали что так не пойдёть - они долго удивлялись и уверяли, что "у нас все работает, проблема на вашей стороне" - я уже ничему не удивляюсь.


 
Влад   (2012-05-24 22:21) [15]


> Интересно было бы ознакомиться с полным протоколом взаимодействия.

мне тоже :)

после
http://localhost:8101/webpaystest/WebPays?
сделанного на яве
(без исходника(декомпилятор.. я и в прокоментированном тексте на яве не очень много понимаю, а декомпиленном, думаю, вообще невооруженным глазом бкдет неразглядеть :) ))
, вижу уже запись в БД(шифрованная процедура).
т.о. единственная возможность перехватить и поменять параметры представляется именно так -
поднять апач, который возмет запрос первым


 
Влад   (2012-05-24 22:24) [16]

AV это я. Домой пришел.


 
KSergey ©   (2012-05-25 06:21) [17]

> Влад   (24.05.12 22:21) [15]
> > Интересно было бы ознакомиться с полным протоколом взаимодействия.
> мне тоже :)

Я конечно прошу прощения, но я вас не понимаю.


 
AV ©   (2012-05-25 08:34) [18]

Да и я прошу прощения. Юмор такой, дурацкий.
Но не скажу, ибо нельзя
Тем более некоторые моменты не совсем ясны самому.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.049 c
15-1343674849
alexdn
2012-07-30 23:00
2013.03.22
php


15-1353504827
Artem
2012-11-21 17:33
2013.03.22
Перевести проект с Builder C++ на Visual Studio


2-1337336308
leklerk
2012-05-18 14:18
2013.03.22
Проверка, работает ли компьютер


6-1261335712
Vladimir
2009-12-20 22:01
2013.03.22
Передача записи по сети через сокеты


15-1340712165
картман
2012-06-26 16:02
2013.03.22
кластеризация