Mod_rewrite:重定向到查询字符串中的URL - 从重定向的URL末尾丢弃%3f

时间:2014-03-08 11:51:51

标签: apache .htaccess mod-rewrite redirect

我有一个.htaccess重写规则,它接收表单的传入请求:

IN 1) http://some.domain.com/path/to/index.htm?url=http://take.me/
IN 2) http://some.domain.com/path/to/index.htm?url=http://take.me/another/path/file.htm?key1=val1&key2+val2

我想要做的是让规则提取url键的值并重定向到其值,ergo:

OUT 1) http://take.me/
OUT 2) http://take.me/another/path/file.htm?key1=val1&key2=val2

以下条件和规则有效:

RewriteCond %{QUERY_STRING} ^url=(.*)$
RewriteRule ^index\.htm$ %1? [R,L]`

然而,在OUT 2的情况下,我发现在浏览器地址栏中看到的结果URL是:

http://take.me/another/path/file.htm?key1=val1&key2+val2%3f

问题是问题是%3f(编码百分比的问号)被附加到结果URL。问题是由在RewriteRule中使用?引起的,但我需要这样做,以便丢弃原始查询字符串。我不知道%3f是否会导致问题,所以为了安全起见,我想消除它。我们正在使用Apache 2.2.22,因此遗憾的是没有查询字符串丢弃[QSD]选项。

有没有办法在保持规则功能的同时消除%3f

1 个答案:

答案 0 :(得分:0)

您可以将此规则与NE标志一起使用,这意味着no escaping生成的网址:

RewriteCond %{THE_REQUEST} index\.htm\?url=(\S+) [NC]
RewriteRule index\.htm$ %1? [L,R=302,NC,NE]