mod_rewrite:来自查询字符串中的URI的句点

时间:2009-10-20 08:22:58

标签: regex apache mod-rewrite

问题: 见下面的例子。使用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.

1 个答案:

答案 0 :(得分:1)

尝试从THE_REQUEST获取值:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /simp\.fcgi/([^?\ ]*)
RewriteRule ^simp\.fcgi/ simple.fcgi?qs=%1 [QSA]