我在服务器上有一小部分文本文件。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”——带有散列并且在丢失之后。
我可以避免名称中带有散列的文件,但我很好奇为什么当其他编码字符没有时散列会被未编码,而且我在其他地方找不到对此的任何引用。