如果嵌套路径,动态内容的 Apache Location 指令将失败

发布于 2025-01-01 10:18:18 字数 824 浏览 1 评论 0原文

我正在使用 Apache 2.2x。大部分内容是通过 mod_perl 生成的。因此,它是没有文件系统映射的动态内容。完美运用<位置>。

Apache 配置:

<Location /finance_module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>

Module1 可以工作,并在此处显示以表明我的设置在其他方面也可以工作。

模块 2 不起作用。 Apache 说“文件不存在:/home/joe/www/htdocs/finance”。模块配置之间的唯一区别是 Module2 位置包含多个斜杠(我称之为嵌套路径)。

关于“文件不存在”错误:当然它不存在——它是一个位置,而不是文件或目录。那么为什么会出现这种情况呢?

我希望能够使用带有多个斜杠的路径,因为我有很多 mod_perl 模块,并且出于控制目的进行分类会很好。对于一个简单的例子,robots.txt 可以简单地说:

Disallow: /finance/

Apache 文档明确指出 <<地点>指令不需要映射到文件系统,并且非常适合动态生成的内容。

我做错了什么?有解决方法吗? (除了明显的“只是不要这样做”)。

谢谢。

I'm using Apache 2.2x. Most of the content is generated via mod_perl. So, it's dynamic content that has no filesystem mapping. Perfect use of < Location >.

Apache config:

<Location /finance_module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>

Module1 works, and is shown here to show that my setup otherwise works.

Module2 does not work. Apache says "File does not exist: /home/joe/www/htdocs/finance". The only difference between the module configurations is that Module2 location contains multiple slashes (what I'm calling a nested path).

About the "File does not exist" error: Of course it doesn't exist -- it's a Location, not a File or Directory. So why does this happen?

I would like to be able to use paths with multiple slashes because I've got a lot of mod_perl modules, and it would be nice to categorize for purposes of control. For one trivial instance, robots.txt could simply say:

Disallow: /finance/

The Apache docs specifically state that < Location > directives need not map to the filesystem, and are well-suited for dynamically generated content.

What am I doing wrong? Is there a workaround? (Besides the obvious "just don't do that").

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

世界和平 2025-01-08 10:18:18

回答我自己的问题,是为了其他想知道同样问题的人的利益。

简短的回答,使用 LocationMatch。

在上面的示例中,假设 URL 为 /finance/module1 和 /finance/module2。在需要的情况下,拥有“财务/”路径允许将所有财务处理程序配置为一个组。

例如:

<LocationMatch /finance/.*>
  SetHandler perl-script
  PerlAccessHandler foo
</LocationMatch>

<Location /finance/module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>

Answering my own question, for the benefit of anyone else wondering the same thing.

Short answer, use LocationMatch.

In the example above, say the urls are /finance/module1 and /finance/module2. Having the "finance/" path allows all the finance handlers to be configured as a group, in situations where that's desirable.

For example:

<LocationMatch /finance/.*>
  SetHandler perl-script
  PerlAccessHandler foo
</LocationMatch>

<Location /finance/module1>
  SetHandler perl-script
  PerlResponseHandler Finance::Module1
</Location>

<Location /finance/module2>
  SetHandler perl-script
  PerlResponseHandler Finance::Module2
</Location>
撑一把青伞 2025-01-08 10:18:18

也许是轻微的错字?

<Location /finance_module1>

vs.

<Location /finance/module2>

不确定这是否是问题所在。

也许这个(添加到httpd.conf)

Alias /finance "path-to-files"
<Directory "path-to-files">
  Options +Indexes
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

然后尝试该脚本。您也可以在那里创建一个空文件夹吗?

Slight typo perhaps?

<Location /finance_module1>

vs.

<Location /finance/module2>

Not sure if that is the issue.

Perhaps this (add to httpd.conf)

Alias /finance "path-to-files"
<Directory "path-to-files">
  Options +Indexes
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

Then try the script. You could also make an empty folder there perhaps?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文