gpt4 book ai didi

apache - mod_rewrite THE_REQUEST 和 (REQUEST_URI or REQUEST_FILE) 给出不同的文件名 - 为什么?

转载 作者:行者123 更新时间:2023-12-03 17:14:46 24 4
gpt4 key购买 nike

我正在试验 mod-rewrite。我以为我想要的很简单,但我没有通过 REQUEST_URI 获得请求的文件的 URI。而是传递传递的名称。

manual说:

THE_REQUEST

The full HTTP request line sent by the browser to the server (e.g., "GET /index.html HTTP/1.1"). This does not include any additional headers sent by the browser. This value has not been unescaped (decoded), unlike most other variables below.

REQUEST_URI

The resource requested in the HTTP request line. (In the example above, this would be "/index.html".)



但是,两者在我的测试中给出了不同的文件名。我有一个 bootstrap.php,我想通过它发送所有请求。这是测试文件:
<?php
echo $_GET['requestedURI'];
?>

在 .htaccess 文件上我有:
### REWRITE RULES ###
RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .+ bootstrap.php?requestedURI=%{REQUEST_URI} [L]

索取 http://localhost/test.htm推出: /bootstrap.php

如果我将 THE_REQUEST 而不是 REQUEST_URI 放在 .htaccess 中,我会得到 GET/test.htm HTTP/1.1

那么为什么不满足于 THE_REQUEST 呢?好吧,只要查询字符串存在,事情就会中断。如果我要求: http://localhost/test.htm?x=1&y=2我收到 获取/test.htm?x=1 第一个&符号打破了事情。我认为应该可以用 %26 替换查询字符串中的所有&符号,以便它可以工作,但到目前为止我还没有管理......

那么谁能告诉为什么 REQUEST_URI 失败以及如何修复它或如何将&符号重写为查询字符串中的 %26 ?

谢谢。

编辑:上述报告适用于 Win 7 上的 xampp 1.7.3。同时我在生产 Linux 系统上尝试了它,并且 REQUEST_URI 返回了它应该返回的内容。

最佳答案

我环顾四周,没有找到任何好的解释为什么%{REQUEST_URI}表现得像在你的例子中一样。实现您所追求的最常见方法似乎是反向引用:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ bootstrap.php?requestedURI=$1 [L]

编辑

根据您的评论,似乎是 REQUEST_URIREQUEST_FILENAME当重写规则被触发时被更新和重新评估。

关于apache - mod_rewrite THE_REQUEST 和 (REQUEST_URI or REQUEST_FILE) 给出不同的文件名 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com