我正在尝试构build一个重写条件和规则,用& 在查询string中,而不仅仅是&。 当URL以XML格式传输到客户端时,会发生这种情况,因为编码无效。 长期来说,这将是固定的,但短期来说,如果我可以把一个重写规则,将停止404错误。
示例URL是
https://myserver.com/getpdf/download?md5=53d64aee8107d8f8af0c&id=163464591&tz=GMT
到目前为止我已经得到了这个
RewriteCond %{REQUEST_URI} ^/getpdf/download* RewriteRule ^/([^&]+)(&)(.*)$ /$1&$2 [N]
基于serverfault上的其他职位(例如mod-rewrite:replaceurl中的一些字符 )
我打开了重写日志,这就是我所看到的
10.0.0.64 - - [12/Mar/2016:06:42:52 +0000] [myserver.com/sid#7f24e32103e8][rid#7f24e3379870/initial] (2) init rewrite engine with requested uri /getpdf/download 10.0.0.64 - - [12/Mar/2016:06:42:52 +0000] [myserver.com/sid#7f24e32103e8][rid#7f24e3379870/initial] (3) applying pattern '^(md5)([^&]+)(&)(.*)$' to uri '/getpdf/download' 10.0.0.64 - - [12/Mar/2016:06:42:52 +0000] [myserver.com/sid#7f24e32103e8][rid#7f24e3379870/initial] (1) pass through /getpdf/download
任何关于如何正确地形成重写小册子的指导都是很好的。
Apache文档指出,如果要重写URI的查询string部分,则需要使用RewriteCond %{QUERY_STRING} 。
所以,你应该试试这个:
RewriteCond %{QUERY_STRING} md5=([0-9a-f]{20}(&)(id=[0-9]+)(&)(.*) RewriteRule ^md5=([0-9a-f]{20}(&)id=([0-9]+)(&)(.*)$ md5=$1&id=$2&$3 [N]
在Teros的帮助下,我指出了正确的方向,我解决了我的重写规则。
第一步是匹配%{QUERY_STRING}。
RewriteCond %{QUERY_STRING} ^md5=([0-9a-f])(&)id=([0-9])(&)(.*)$
第二步是重写整个URL。 我的错误是认为我只能修改查询string。
RewriteRule ^(.*)$ https://myserver.com/getpdf/download?md5=%1&id=%3&%5 [N]
一些技巧
希望这有助于别人在重写的世界中迷失。