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

时间:2016-09-28 12:06:26

标签: string apache mod-rewrite replace url-rewriting

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

comments
comments?id=123

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

如果我在浏览器窗口中手动编码? TO %3F并输入以下内容,则会加载正确的文件:

comments%3Fid=123

有没有办法解决这个问题?也许让apache停止将?视为查询分隔符并将其视为文件名字符?或者重写网址并将?更改为%3F

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

1 个答案:

答案 0 :(得分:2)

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

答案越长? URL中的保留字符,使用它作为文件名的一部分将永远导致问题,建议的解决方案是选择一个不同的字符用于这些文件名。有很多可供选择 - 只是避免? &安培; @和#你可能会没事的。

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

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

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