【问题标题】:Absolute file paths in mod_rewrite - allowed?mod_rewrite 中的绝对文件路径 - 允许吗?
【发布时间】:2010-02-03 11:44:22
【问题描述】:

这是this question.的后续行动

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

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

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

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

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

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

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,不幸的是,这符合我的经验。没有办法绕过.htaccess 限制,对吗?即使“目标”文件夹归当前用户所有也不行?
    • 单独使用RewriteRule 是不行的,但是符号链接(outis 的建议)可以正常工作如果您的托管服务提供商足够大方允许FollowSymlinks 或@987654326 @ 被覆盖。
    【解决方案2】:

    RewriteRule 中的替换是 URL 路径。替换中的绝对路径是绝对 URL 路径,而不是绝对文件路径。如果您无法引用资源(即它没有 URL),那么重写引擎将无法帮助您。

    尽管您需要启用 FollowSymLinks 或 SymLinksIfOwnerMatch option,但请尝试创建符号链接。如果你没有 shell 访问权限,你可以编写一个脚本来创建符号链接。

    【讨论】:

    • modrewrite... 根据此时的 API 阶段,任何 URL 操作都为时已晚。当您在每个目录上下文中操作 URL/文件名时,mod_rewrite 首先将文件名重写回其对应的 URL(这通常是不可能的,但请参阅下面的 RewriteBase 指令以获取实现此目的的技巧),然后启动新的内部子请求使用新网址。这将重新启动 API 阶段的处理。
    • @luca:该部分讨论了如何将文件路径转换为 ​​RewriteRules 的 URL 路径。它将 RewriteRules 描述为应用于 URL 路径,并将替换描述为 URL 路径。 Martin 链接到的部分提到允许文件路径作为替换。
    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多