我在相关的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
答案 0 :(得分:1)
您需要引用可以在重写规则中定义的标志字符。
请参阅https://httpd.apache.org/docs/current/rewrite/flags.html
另外,我可以看到他们的概念中存在错误,如果您正在编写重写规则,则无法通过客户端的javascript读取生成的URL。
如果你真的想这样做,你可以使用R标志,它将重定向,但在这种情况下重写规则的目的将被打败。