提问人:Pekka 提问时间:2/3/2010 最后编辑:CommunityPekka 更新时间:3/11/2010 访问量:2017
mod_rewrite中的绝对文件路径 - 允许?
Absolute file paths in mod_rewrite - allowed?
问:
这是这个问题的后续。
我正在尝试构建一个规则,其中重写目标是 Web 根目录之外的绝对路径,例如mod_rewrite
RewriteRule ^manual(/(.*))?$ /www/htdocs/customername/manual/$2 [L]
我需要这样做,因为我无法在上下文中使用(共享主机)。Alias
.htaccess
有回应暗示这根本不可能。
这是真的吗?我在手册中找不到任何明确的信息。
有人可以澄清一下什么时候绝对路径是可能的,什么时候不是?
答:
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的建议)就可以正常工作。RewriteRule
FollowSymlinks
SymLinksIfOwnerMatch
评论