Можно ли перенаправить на страницу PHP из сценария Perl CGI? - PullRequest
1 голос
/ 29 апреля 2010

Я работаю с сайтом, который использует внешний источник для работы с платежными транзакциями, одним из условий является то, что в случае успеха вызывается CGI-скрипт.

То, что я хочу знать, это то, что можно сделать перенаправление на страницу PHP с помощью скрипта CGI и заставить PHP определить, что оно было загружено с помощью перенаправления Perl, в настоящее время у меня это есть в моем Perl. *

#!/usr/bin/perl
#
# fixedredir.cgi

use strict;
use warnings;


my $URL = "http://www.example.com/";

Location: $URL;

Ответы [ 4 ]

4 голосов
/ 29 апреля 2010

Стандартный способ программирования CGI в Perl - использование модуля CGI.pm . Перенаправление может быть закодировано следующим образом (не уверен в синтаксисе).

 #!/usr/bin/perl

 use strict;
 use warnings;
 use CGI;

 my $URL = "http://www.example.com/";

 print CGI::redirect($URL); 

Мне не важно, является ли целевая страница PHP или чем-то еще.

Другая страница не может точно знать, пришла ли она из-за перенаправления perl (на самом деле концепция довольно абсурдна). Если у вас есть контроль над другой страницей PHP, вы можете установить некоторые соглашения и передать параметр в строке запроса.

 my $URL = "http://www.example.com/x.php?redirectFromPerl=1";

Обновление : Как прокомментировали другие, вопрос действительно не имеет большого смысла - и некоторые утверждения («в случае успеха называется CGI-скрипт») предполагают некоторые базовые недоразумения относительно основ динамических веб-страниц и CGI , Мой пример кода показывает, как сделать перенаправление в Perl CGI, но вполне вероятно, что исходный вопрос (и, следовательно, ответ) не подходит для реального сценария.

2 голосов
/ 29 апреля 2010

Если это внешний источник, который вызывает скрипт CGI, как он узнает, что это страница PHP или скрипт CGI на вашем сайте, что он вызывает? Для меня вы можете просто настроить этот платежный сервис так, чтобы он вызывал вашу страницу PHP и не требовал перенаправления. Или я что-то не поняла?

Если он ищет определенный URL на вашем сайте, e. г. /cgi-bin/trigger.cgi, вы можете обмануть его с помощью .htaccess, вставив cgi-bin, например:

<Files trigger.cgi>
    SetHandler application/x-httpd-php
</Files>
1 голос
/ 29 апреля 2010

Самый простой способ - добавить переменную get в ваш URL:

my $URL = "http://www.example.com/?from=perl"; 

тогда ваш PHP не должен делать ничего особенного. Однако вы можете посмотреть на значение $_SERVER['HTTP_REFERER'] и проанализировать имя ссылающегося скрипта. Но так как это значение устанавливается пользовательским агентом, оно не обязательно надежно или присутствует.

0 голосов
/ 09 августа 2013

Чтобы перенаправить страницу на другую, используйте следующий метод.

use CGI::Session;
use CGI::Session::Plugin::Redirect;
my $session = new CGI::Session();
print $session->redirect('http://exsample.com/redirect-path/');

Поиск search.cpan.org для получения дополнительной информации о модуле сеанса.

...