我使用wget将站点镜像到本地服务器,本地文件名如下所示:
comments
comments?id=123
本地这些是显示唯一内容的静态文件。
但是,当我在浏览器中访问第二个文件时,它会一直显示文件comments
中的内容,并将查询字符串附加到?id=123
,因此它不显示文件comments?id=123
中的内容
如果我在浏览器窗口中手动编码?
TO %3F
并输入以下内容,则会加载正确的文件:
comments%3Fid=123
有没有办法解决这个问题?也许让apache停止将?
视为查询分隔符并将其视为文件名字符?或者重写网址并将?
更改为%3F
?
编辑:文件名和请求中?
导致的问题确实太多了。我最终使用wget选项--restrict-file-names=windows
,在保存文件名时会将?
转换为@
。
答案 0 :(得分:2)
简短的回答是“不要这样做。”
答案越长? URL中的保留字符,使用它作为文件名的一部分将永远导致问题,建议的解决方案是选择一个不同的字符用于这些文件名。有很多可供选择 - 只是避免? &安培; @和#你可能会没事的。
如果您坚持保留文件名(或者如果您没有选项),请尝试:
RewriteCond %{QUERY_STRING} (.*)
RewriteRule (.*) $1%%3F%1 [NE]
然而,这将会激活任何时间你有一个查询字符串,这可能不是你想要的。