在Apache中编码双引号

Tomcat不允许在URL中存在任何'''(双引号)字符,因此根据RFC 7230将其视为无效字符。

然而,我有很多的服务客户仍然采取像http://abcd.com/userservice?user="donald" URL我的服务,我正在寻找的方式来重写这个URL为http://abcd.com/userservice?user=%20donald%20 。 我必须这样做多个服务(〜20)。

我看着https://stackoverflow.com/questions/1279681/mod-rewrite-replace-underscores-with-dashes,但它不能帮助我的用例。 Apache似乎不让用户重写查询参数。 有什么build议么?

这是客户端即浏览器的任务。 如果您在地址栏中键入http://example.com/userservice?user="donald" ,则会自动使用百分比编码( RFC 3986,2.1 ;在RFC 7230,2.7.3中提到)进行编码,从而生成实际的查询开始于:

 GET /userservice?user=%22donald%22 HTTP/1.1 Host: example.com 

在你的问题中提到的%20与ASCII空格字符0x20 ,而%22代表ASCII " (双引号, 0x22 )。

你可以重写%22%20 ,但我认为这只是一个错误。

为了更完整,这里是一个图表。 对于百分比编码,查看Hex列。

 ASCII Hex Symbol ASCII Hex Symbol ASCII Hex Symbol ASCII Hex Symbol 32 20 (space) 39 27 ' 46 2E . 95 5F _ 33 21 ! 40 28 ( 47 2F / 96 60 ` 34 22 " 41 29 ) 64 40 @ 123 7B { 35 23 # 42 2A * 91 5B [ 124 7C | 36 24 $ 43 2B + 92 5C \ 125 7D } 37 25 % 44 2C , 93 5D ] 126 7E ~ 38 26 & 45 2D - 94 5E ^ 127 7F