1

我在服务器上有一小部分文本文件。URL 如下所示: http: //mysite.com/My%20Text%20File.txt

我有一个小的 PHP 脚本,它将文本文件 URI 作为参数并将文本文件转换为 JSON: http://mysite.com/json.php?file=/My%20Text% 20File.txt

而且我有一个重写规则使它变得漂亮: RewriteRule ^(.*).json$ /json.php?file=$1.txt

而且效果很好。现在 JSON 的 URI 与文本 URI 相同,但文件扩展名除外。但是,如果我有一个名称中有编码的文本文件:http: //mysite.com/Text%20File%20%231.txt

Apache 打开文本文件没有问题。同样,“真实” URI 有效: http://mysite.com/json.php?file=/Text%20File%20 %231.txt

但是重写规则却把它搞砸了。所以 PHP 看到的“文件”GET 参数是“/Text%20File%20”——带有散列并且在丢失之后。

我可以避免名称中带有散列的文件,但我很好奇为什么当其他编码字符没有时散列会被未编码,而且我在其他地方找不到对此的任何引用。

4

1 回答 1

1

您需要在重写规则中使用该B标志:

RewriteRule ^(.*).json$ /json.php?file=$1.txt [B]
于 2012-09-21T03:13:21.113 回答