Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 可以将%26重写为特殊字符序列的重写规则_Apache_Rewrite - Fatal编程技术网

Apache 可以将%26重写为特殊字符序列的重写规则

Apache 可以将%26重写为特殊字符序列的重写规则,apache,rewrite,Apache,Rewrite,我的网站提供来自tocmat的文档,这些文档的文件名中有时包含& 所以 nick&janes.doc 以下是我们访问它的URL: http://mysite.com/sub/nick%26janes.doc 由于某些原因,我们的Apache+OpenSSL版本由于某些错误而无法正确地重新写入。因此%26变成一个&然后请求全部被破坏,因为http://mysite.com/sub/nick&janes.doc 升级OpenSSL将解决这个问题,但不幸的是,这在几个月内都不是一个选项 作为一种解决方

我的网站提供来自tocmat的文档,这些文档的文件名中有时包含
&

所以

nick&janes.doc

以下是我们访问它的URL:

http://mysite.com/sub/nick%26janes.doc

由于某些原因,我们的Apache+OpenSSL版本由于某些错误而无法正确地重新写入。因此%26变成一个&然后请求全部被破坏,因为
http://mysite.com/sub/nick&janes.doc

升级OpenSSL将解决这个问题,但不幸的是,这在几个月内都不是一个选项

作为一种解决方法,我们正在尝试创建一个重写规则,该规则可以将任何
%26
转换为特殊字符序列。。。。让我们说
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。然后在Tomcat上,我们可以使用一个过滤器来修复URL,这样就没有问题了

有人知道我怎么写这样的重写规则吗

RewriteRule ^(.*)&(.*)$ $1__-__$2 [N]
这会将
foo%26bar
转换为
foo\uuuuuuu-bar

此时,您可以使用Tomcat筛选器将任何带有
\uuu-\ uu
的URL更改回%26

来自#httpd的注释:如果存在设置的最大迭代次数,则可以使用重写规则进行更改。一个重写规则可以用其他规则替换一个%26,因此,如果您有刻痕%26janes%26erics%26johns.doc,则需要3个重写规则。因此,这是可能的,但看起来很愚蠢:)另一个更明智的选择是使用mod_lua/perl/python重写URI