【问题标题】:mod_rewrite behaviour when no rewriteBase没有 rewriteBase 时的 mod_rewrite 行为
【发布时间】:2016-01-08 18:16:17
【问题描述】:

只是想确认一下。根据我收集到的 mod_rewrite 工作原理,Apache 收到一个 URL 并立即 mod_rewrite 在 httpd.conf 中应用(非)规则,然后每个目录的 mod-rewrite 开始工作,然后使用新的 URL 重新启动进程,如果进行任何更改。 @JonLin 对this question 的出色回答首先表示,当您的每个目录规则指定一个绝对替换(即以斜杠开头)时,假定它与我得到的 DocumentRoot 相关。但是相对替换(没有斜线)Jon 然后说:

它基于规则所在的目录。所以如果

重写规则 ^foo$ bar.php [L]

在“根目录”中,您访问 http://example.com/foo,您将获得 http://example.com/bar.php 服务。但是,如果该规则位于“subdir1”目录中,并且您访问 http://example.com/subdir1/foo,您将获得 http://example.com/subdir1/bar.php。等等。这有时有效,有时无效,正如文档所说,它应该是相对路径所必需的,但大多数时候它似乎有效。除非您正在重定向(使用 R 标志,或者因为您的规则目标中有 http://host 而隐含地)。这意味着这条规则:

重写规则 ^foo$ bar.php [L,R]

如果它在“subdir2”目录中,并且您访问 http://example.com/subdir2/foo,mod_rewrite 会将相对路径误认为是文件路径而不是 URL 路径,并且因为 R标志,你最终会被重定向到:http://example.com/var/www/localhost/htdocs/subdir1。

正如 Jon 在最后一点中解释的那样,当发生重定向并且没有 rewriteBase 时,将作为文件路径的字符串附加到站点的基地址以创建虚假 URL。但只是为了确认,即使在乔恩提到的前一种情况下,即。不是实际的重定向,替换的字符串确实会被发送回 Apache 的 URL 接收代码,重新启动整个过程,对吗? this page of the spec 上的图表似乎暗示,在没有规则进行更改之前,该过程会不断重新启动。这些非重定向情况似乎是将文件路径从文件系统根目录直接添加到 htaccess 目录到替换开头的时间。但是,如何将其转换为 URL 接收代码所期望的正确 URL - http://localhost 是否被前置?我认为这会使所有内容都与文档根目录相关,而不是实际的文件系统根目录。

谢谢!

【问题讨论】:

    标签: apache .htaccess mod-rewrite


    【解决方案1】:

    一直在做更多的阅读,并认为我已经为任何感兴趣的人解释了这一点。 关于我关于文件系统绝对路径如何变成内部重定向的有效 url 的问题,我认为 HTTP 请求中的 URI 包含“http://hostname”,但这已被切断,即。 URI 类似于 /this/is/a/path。主机名位于单独的“Host”头字段中,并且在 mod_rewrite 运行时不再是重要信息,因为 Apache 的初始 Post Read Request 阶段已经注意到端口上的 GET 请求,如果 Name-基于虚拟主机正在使用中,从 Host 头字段中解释诸如 DocumentRoot 之类的东西,最后调用 mod_rewrite 执行的URI Translation Phase。因此,任何时候 mod_rewrite 运行时,都可能只有一个主机名将我们带到这里。

    总而言之,我所说的 Apache 的“URL 接收”部分总是处理 /paths/like/this/without/hostname,而不仅仅是在内部重定向之后。规范确实说 rewriteCond/rewriteRule 与此类路径匹配,但我认为主机名最初存在并被删除。所以剩下的就是确保我们的规则为它们在内部重定向中运行的情况做好了准备t 以斜线开头。真是一口。

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2012-02-10
      • 2011-01-03
      • 2021-04-03
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多