mod_rewrite中的绝对文件路径 - 允许?

Absolute file paths in mod_rewrite - allowed?

提问人:Pekka 提问时间:2/3/2010 最后编辑:CommunityPekka 更新时间:3/11/2010 访问量:2017

问:

这是这个问题的后续

我正在尝试构建一个规则,其中重写目标是 Web 根目录之外的绝对路径,例如mod_rewrite

RewriteRule ^manual(/(.*))?$ /www/htdocs/customername/manual/$2 [L]

我需要这样做,因为我无法在上下文中使用(共享主机)。Alias.htaccess

有回应暗示这根本不可能。

这是真的吗?我在手册中找不到任何明确的信息。

有人可以澄清一下什么时候绝对路径是可能的,什么时候不是?

apache mod-重写

评论


答:

0赞 outis 3/5/2010 #1

RewriteRule 中的替换项是 URL 路径。替换中的绝对路径是绝对 URL 路径,而不是绝对文件路径。如果你不能引用一个资源(即它没有URL),那么重写引擎就帮不了你。

相反,请尝试创建符号链接,但需要启用 FollowSymLinks 或 SymLinksIfOwnerMatch 选项。如果您没有 shell 访问权限,您可以编写脚本来创建符号链接。

评论

0赞 Luca Rocchi 3/11/2010
modrewrite...根据API阶段,此时进行任何URL操作都为时已晚。当您在每个目录上下文中操作 URL/文件名时,mod_rewrite首先将文件名重写回其对应的 URL(这通常是不可能的,但请参阅下面的 RewriteBase 指令了解实现此目的的技巧),然后使用新 URL 启动新的内部子请求。这将重新启动 API 阶段的处理。
0赞 outis 3/11/2010
@luca:该部分讨论如何将文件路径转换为 RewriteRules 的 URL 路径。它将 RewriteRules 描述为应用于 URL 路径,并将替换描述为 URL 路径。Martin 链接到的章节提到允许文件路径作为替换。
5赞 Martin 3/5/2010 #2

当然,可以在服务器配置中使用绝对文件路径。

但是,您将无法在文件中执行此操作,因为这将使您能够读取文档根目录之外的文件,甚至是来自其他客户的本应受块保护的文件。.htaccess<Location ...>

评论

0赞 Pekka 3/5/2010
好吧,不幸的是,这与我的经历相符。没有办法绕过这个限制,对吧?即使“目标”文件夹归当前用户所有,也不行?.htaccess
0赞 Martin 3/5/2010
单独使用是没有办法的,但是如果您的托管服务提供商足够慷慨地允许或被覆盖,那么符号链接(outis的建议)就可以正常工作。RewriteRuleFollowSymlinksSymLinksIfOwnerMatch