2016-09-28 78 views
0

我镜像站点到本地服务器wget和文件名在本地是这样的:如何使apache处理查询字符串作为文件名?

comments 
comments?id=123 

本地这些都是展现独特内容的静态文件。 但是,当我在浏览器中访问第二个文件它使来自文件comments展示内容并追加查询字符串它?id=123所以它没有显示它加载正确的文件,如果我手工编码? TO %3F从文件comments?id=123

内容在浏览器窗口和I型:

comments%3Fid=123

是有办法解决这一问题?也许让Apache停止对待?作为查询分隔符并将其视为文件名字符?或者重新编写URL并将?更改为%3F

编辑:事实上,太多的问题在文件名和请求引起?。我最终使用了wget选项--restrict-file-names=windows,它将在保存文件名时将?转换为@

回答

2

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

较长的答案是?是URL中的一个保留字符,将其用作文件名的一部分将永远引发问题,推荐的解决方案是选择不同的字符用于这些文件名。有很多可以选择 - 只是避免? & @和#你可能会很好。

如果你坚持保留的文件名(或者,如果你没有一个选项)尝试:

RewriteCond %{QUERY_STRING} (.*) 
RewriteRule (.*) $1%%3F%1 [NE] 

然而,这会解雇任何时间你有一个查询字符串,很可能不是你想要的。

+0

我想匹配所有'?'是不是一个问题,因为我知道在目录中的所有文件将始终是静态的。然而'$ 1 %% 3F%1'显示'坏请求'和'$ 1 \%3F%1''服务器错误',其他任何我可以尝试? – adrianTNT