Apache2 apachemod_perl:基于url的动态处理程序

Apache2 apachemod_perl:基于url的动态处理程序,apache2,mod-perl2,Apache2,Mod Perl2,我的要求如下 如果请求的url类似于 http://localhost/mod_perl/TopModule/ActualModule/method1 然后我应该调用TopModule::ActualModule->method1() 如何配置Apache来实现这一点?脚本名称后面的URL部分在$ENV{PATH_INFO}中传递给您的perl程序。因此,您可以创建一个称为modulerunner的perl脚本,您可以使用类似“”的URL调用它: my$arg=$ENV{PATH\u INFO

我的要求如下

如果请求的url类似于

http://localhost/mod_perl/TopModule/ActualModule/method1
然后我应该调用TopModule::ActualModule->method1()


如何配置Apache来实现这一点?

脚本名称后面的URL部分在$ENV{PATH_INFO}中传递给您的perl程序。因此,您可以创建一个称为modulerunner的perl脚本,您可以使用类似“”的URL调用它:

my$arg=$ENV{PATH\u INFO};
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
$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";
}