如何理解这些mod_rewrite日志文件条目?

时间:2016-04-10 23:17:27

标签: apache mod-rewrite

我在相关的Apache虚拟主机配置中有以下内容:

<Directory "/var/www/html/path">
  RewriteEngine on
  RewriteBase /
  RewriteRule ^go\.html$ /out/qs.html?name=value
</Directory>

以下是qs.html文件的内容:

<html>
 <head><title>Query String</title></head>
 <body>
  <h2>Query String</h2>
  <script>
   document.write("<p>Query String: " + window.location.search.substring(1) + "</p>");
  </script>
 </body>
</html>

当我向服务器发送http请求以获取/path/go.html(没有任何附加的查询字符串)时,将返回文档,但在qs.html文档的呈现中看不到查询字符串。我希望看到&#34; name = value&#34;查询字符串。

以下是日志文件中删除了绒毛并添加了行号的相关行:

1. [perdir /var/www/html/path/] strip per-dir prefix: /var/www/html/path/go.html -> go.html
2. [perdir /var/www/html/path/] applying pattern '^go\\.html$' to uri 'go.html'
3. [perdir /var/www/html/path/] rewrite 'go.html' -> '/out/qs.html?name=value'
4. split uri=/out/qs.html?name=value -> uri=/out/qs.html, args=name=value
5. [perdir /var/www/html/path/] trying to replace prefix /var/www/html/path/ with /
6. [perdir /var/www/html/path/] internal redirect with /out/qs.html [INTERNAL REDIRECT]

实际上第1到第3行几乎是我所期望的,如果只是停在那里,我想我会理解。我不明白的是,为什么它从那一点开始继续,剩下的三条线告诉我什么。有人可以帮我理解这一点。我把头发撕成了这个。感谢。

     ... doug

1 个答案:

答案 0 :(得分:1)

您需要引用可以在重写规则中定义的标志字符。

请参阅https://httpd.apache.org/docs/current/rewrite/flags.html

另外,我可以看到他们的概念中存在错误,如果您正在编写重写规则,则无法通过客户端的javascript读取生成的URL。

如果你真的想这样做,你可以使用R标志,它将重定向,但在这种情况下重写规则的目的将被打败。