我正在使用apache/mod_rewrite重写URL,但我遇到加号问题.
使用以下规则..
RewriteRule ^/(.+[^/])/?$ http://localhost:8080/app/home?tag=$1 [P,L]
Run Code Online (Sandbox Code Playgroud)
都:
http://localhost/1+1 and http://localhost/1%2B2
Run Code Online (Sandbox Code Playgroud)
最终成为
uri=http://localhost:8080/app/home, args=tag=1+2
Run Code Online (Sandbox Code Playgroud)
因此,在这两种情况下,应用程序都会将加号转换为空格,因此无法区分空格和加号.
如果我使用"B"标志,那么在两种情况下,+符号都会转换为%2B,并且应用程序最终会出现相同的问题,但会反转(空格和加号都是加号)
有没有办法让apache正确地将%2B转换为加号而不是空格?
我读了一些关于mod_security的内容,但我没有使用它,所以我不确定是否还有其他安全机制导致这种情况?
任何帮助将不胜感激!
Apache是我的Web应用程序的前端,然后我使用mod_rewrite将请求代理到JBoss.到目前为止,这听起来很标准,但我遇到的问题是:如果我通过jboss @直接访问应用程序http://localhost:8080/app/page?raw=foo%26bar&page=1:
request.getParameter("raw") = foo&bar
Run Code Online (Sandbox Code Playgroud)
如果我通过Apache @访问该应用程序 http://localhost/foo%26bar&page=1
request.getParameter("raw") = foo
Run Code Online (Sandbox Code Playgroud)
所以在这个过程中的某个地方,它%26会丢失并被替换为一个&用于切换原始变量的东西.
这是我的Apache重写规则.
RewriteRule ^/(.*) \
http://localhost:8080/app/home?raw=$1 [L,P]
Run Code Online (Sandbox Code Playgroud)
Apache访问日志显示: http://localhost/foo%26bar&page=1
重写日志显示: http://localhost:8080/app/home?raw=foo&bar&page=1
但我希望请求是: http://localhost:8080/app/home?raw=foo%26bar&page=1
我很确定这也会出现斜杠/,对我来说这是某种编码问题.有没有办法代理URL未触动?似乎无法想出这个.
编辑:
首先我要说的是感谢Gumbo给我一些非常好的建议!基于这些建议,我已经简化了我的Apache配置以进行测试.
这就是它的样子:
ServerRoot "C:/apps/xampplite/apache"
Listen 80
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule log_config_module modules/mod_log_config.so
ServerAdmin postmaster@localhost
ServerName localhost:80
DocumentRoot "C:/apps/xampplite/htdocs"
ErrorLog "logs/error.log"
LogLevel debug
DefaultType text/plain
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common …Run Code Online (Sandbox Code Playgroud)