我正在尝试将 Apache 配置为将大多数 URI 发送到我的 mod_perl 应用程序,但我想使用默认处理程序提供的一些文件除外。(发送静态文件)
我希望所有http://myserver.com/xxxxx都使用 /、/index.html、robots.txt 和一些静态服务的子文件夹转到 mod_perl。
我尝试了许多不同的组合,但我无法让它发挥作用。似乎没有办法否定 < LocationMatches > 等。
如果我定义了 PERL 变量,一切都进入脚本,关闭它,我可以切断静态数据,但显然脚本不起作用。
<Directory /home/httpd/plaintext>
AllowOverride None
<Files ~ "(index.html|robots.txt|favicon.gif)">
SetHandler default-script
</Files>
AddDefaultCharset utf-8
DirectorySlash off
Order allow,deny
Allow from all
</Directory>
<IfDefine PERL>
<Location />
SetHandler perl-script
PerlResponseHandler LinkCrunchDB::Handler
</Location>
</IfDefine>
我猜想破解模块以使用内部重定向可能会奏效,但它很难看。
我使用的是 Gentoo Linux,它包括 module.d/ 文件夹和 vhost.d 文件夹中的所有文件。我检查了所有这些并删除了任何目录或位置文件夹,没有任何!
非常感谢。
这是我对 mod_perl 的长期烦恼之一,也是我最终很高兴 Ruby on Rails 出现的原因。
基本上,您无法共享 Perl 脚本所在的位置以及静态内容所在的位置。它们必须位于不同的目录中。我经常作弊并为静态和动态内容使用不同的主机名,从而消除了整个问题。您还可以阅读更多关于如何将静态内容放入子目录的信息。