问题: 见下面的例子。使用mod_rewrite时 “脚本名称后面的URI部分”进入查询字符串(以任何方式), 删除每个“目录”的结束时段(。)。 (win32上的Apache 2.2.14。)
问题: 有没有办法解决这个问题,还是我必须解析REQUEST_URI?
请求(“。”已转义):
http://localhost/simp.fcgi/fo%2eo%2e=12%2e3%2e/ba%2eh%2e%2e%2e/baz%2e?foo%2e=bar%2e
(Always get REQUEST_URI: /simp.fcgi/fo.o.=12.3./ba.h.../baz%2e?foo%2e=bar%2e)
RewriteRule ^simp.fcgi/(.*)$ simple.fcgi?qs=$1
Got QUERY_STRING: qs=fo.o.=12.3/ba.h/baz
Expected QUERY_STRING: qs=fo.o.=12.3./ba.h.../baz.
or QUERY_STRING: qs=fo%2eo%2e=12%2e3%2e/ba%2eh%2e%2e%2e/baz%2e
RewriteRule ^simp.fcgi/(.*)$ simple.fcgi?qs=$1 [NE]
Got QUERY_STRING: qs=fo.o.=12.3/ba.h/baz
Expected QUERY_STRING: qs=fo.o.=12.3./ba.h.../baz.
or QUERY_STRING: qs=fo%2eo%2e=12%2e3%2e/ba%2eh%2e%2e%2e/baz%2e
RewriteRule ^simp.fcgi/(.*)$ simple.fcgi?qs=$1 [QSA]
Got QUERY_STRING: qs=fo.o.=12.3/ba.h/baz&foo%2e=bar%2e
Expected QUERY_STRING: qs=fo.o.=12.3./ba.h.../baz.&foo%2e=bar%2e
or QUERY_STRING: qs=fo%2eo%2e=12%2e3%2e/ba%2eh%2e%2e%2e/baz%2e&foo%2e=bar%2e
请求(“。”未转义):
http://localhost/simp.fcgi/fo.o.=12.3./ba.h.../baz.?foo.=bar.
(Always get REQUEST_URI: /simp.fcgi/fo.o.=12.3./ba.h.../baz%2e?foo.=bar.)
RewriteRule ^simp.fcgi/(.*)$ simple.fcgi?qs=$1 [QSA]
Got QUERY_STRING: qs=fo.o.=12.3/ba.h/baz&foo.=bar.
Expected QUERY_STRING: qs=fo.o.=12.3./ba.h.../baz.&foo.=bar.
RewriteRule ^simp.fcgi/(.*)$ simple.fcgi?qs=$1
Got QUERY_STRING: qs=fo.o.=12.3/ba.h/baz
Expected QUERY_STRING: qs=fo.o.=12.3./ba.h.../baz.
RewriteRule ^simp.fcgi/(.*)$ simple.fcgi?qs=$1 [NE]
Got QUERY_STRING: qs=fo.o.=12.3/ba.h/baz
Expected QUERY_STRING: qs=fo.o.=12.3./ba.h.../baz.
答案 0 :(得分:1)
尝试从THE_REQUEST
获取值:
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /simp\.fcgi/([^?\ ]*)
RewriteRule ^simp\.fcgi/ simple.fcgi?qs=%1 [QSA]