String 如何使apache将查询字符串视为文件名?

String 如何使apache将查询字符串视为文件名?,string,apache,mod-rewrite,replace,url-rewriting,String,Apache,Mod Rewrite,Replace,Url Rewriting,我使用wget将站点镜像到本地服务器,本地文件名如下所示: comments comments?id=123 在本地,这些是显示唯一内容的静态文件。 但当我在浏览器中访问第二个文件时,它会不断显示文件注释中的内容,并将查询字符串附加到它?id=123,因此它不会显示文件注释中的内容?id=123 如果我在浏览器窗口中将?手动编码为%3F,并键入: 注释%3Fid=123 有办法解决这个问题吗?也许可以让apache停止把?当作查询分隔符,而把它当作文件名字符?或者重写URL并将?更改为%3F

我使用wget将站点镜像到本地服务器,本地文件名如下所示:

comments
comments?id=123
在本地,这些是显示唯一内容的静态文件。 但当我在浏览器中访问第二个文件时,它会不断显示文件
注释中的内容,并将查询字符串附加到它
?id=123
,因此它不会显示文件
注释中的内容?id=123

如果我在浏览器窗口中将
手动编码为
%3F
,并键入:

注释%3Fid=123

有办法解决这个问题吗?也许可以让apache停止把
当作查询分隔符,而把它当作文件名字符?或者重写URL并将
更改为
%3F

编辑:文件名和请求中的
确实导致了太多问题。最后我使用了wget选项
--restrict file names=windows
,在保存文件名时将
转换为
@

简短的回答是“不要那样做。”

较长的答案是?是URL中的保留字符,将其用作文件名的一部分将永远导致问题,建议的解决方案是在这些文件名中选择不同的字符。有很多可供选择-只是避免?&@而且你可能会没事的

如果您坚持保留文件名(或者如果您没有选择权),请尝试:

但是,这将在您有查询字符串时触发,这可能不是您想要的。

简短的回答是“不要这样做。”

较长的答案是?是URL中的保留字符,将其用作文件名的一部分将永远导致问题,建议的解决方案是在这些文件名中选择不同的字符。有很多可供选择-只是避免?&@而且你可能会没事的

如果您坚持保留文件名(或者如果您没有选择权),请尝试:


但是,每当您有一个查询字符串时,它就会触发,这可能不是您想要的。

我认为匹配所有
不是问题,因为我知道该目录中的所有文件都是静态的。但是
$1%%3F%1
显示
错误请求
$1\%3F%1
服务器错误
,还有什么我可以尝试的吗?我认为匹配所有
不是问题,因为我知道该目录中的所有文件都是静态的。但是
$1%%3F%1
显示
错误请求
$1\%3F%1
服务器错误
,还有什么我可以尝试的吗?
RewriteCond %{QUERY_STRING} (.*)
RewriteRule (.*) $1%%3F%1 [NE]