Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПрошу помощи по .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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.059 c