0
我的要求如下。apache mod_perl:基於url的動態處理程序
如果請求的URL是一樣
http://localhost/mod_perl/TopModule/ActualModule/method1
那我應該叫頁首單元:: ActualModule->方法1()
我如何配置Apache要做到這一點?
我的要求如下。apache mod_perl:基於url的動態處理程序
如果請求的URL是一樣
http://localhost/mod_perl/TopModule/ActualModule/method1
那我應該叫頁首單元:: ActualModule->方法1()
我如何配置Apache要做到這一點?
腳本名稱後面的URL部分在$ ENV {PATH_INFO}中傳遞給您的perl程序。所以,你可以創建你叫modulerunner一個Perl腳本,您就可以使用「http://whatever.host/modulerunner/Top/Actual/method」的網址撥打:
my $arg=$ENV{PATH_INFO}; <-- contains Top/Actual/method
my @arg=split("/", $arg); <-- [ "Top", "Actual", "method" ]
my $method=pop @arg; <-- removes "method", "Top" and "Actual" remain in @arg
my $modules=join("::", @arg); <-- "Top::Actual"
my $call="$modules->$method()"; <-- "Top::Actual->method()"
eval $call; <-- actually execute the method
但是,我不會在所有建議這一點 - 它打開了太多的安全漏洞,允許您的網站訪問者可以在任何模塊中調用任何perl函數。所以,除非你在自己的服務器上做這個沒有連接任何其他的服務器,否則我只會去做一個非常無聊的後續級聯。
$p=$ENV{PATH_INFO};
if ($p eq "Top/Actual/method") { Top::Actual->method(); }
elseif ($p eq "Other/Module/function" { Other::Module->function(); }
else {
print "<font color=red>Don't try to hack me this way, you can't.</font>\n";
}
哦,不使用<字體>標籤ONY任何生產要麼;)