Apache mod_rewrite删除问号(?)和查询stringreplace

我用mod_rewrite注册了一个RewriteRule,但是被replace的URL是错误的。

规则是:

RewriteRule ^/img/z(0|1)u(.+)\.(gif|jpg|jpeg|png)$ /image-servlet/img/?z=$1&url=$2 [NE,QSA,PT,T=image/$3] 

当我访问以下url时:

 http://localhost/img/z1uABC.jpg 

应用的规则redirect到:

 http://localhost/image-servlet/img/ABC 

最终的URL错过了查询stringreplace:

 ?z=$1&url=$2 

并被replace为:

 $2 

有人可以帮我解决我的错误吗?

谢谢,

和过去

我知道这是丑陋的,甚至更低效,但你有没有尝试过:

(NE,QSA,PT,T = image / $ 3),我们可以看到,

我似乎记得,mod_rewrite只会匹配(。+)或(。*)到一个variables。 显然(从你的例子),这是唯一正确的重写。

当然,那mod_rewrite规则将永远匹配,并要求脚本做一些inputvalidation。

另外,apache支持TRACE http命令,这对于追踪多个(意外的)重写是很好的。 只需将TRACE中的GET请求与GET请求交换,例如:

TRACE /z1uABC.jpg HTTP / 1.1

主持人:foohost.com

最后,如果你仍然卡住,尝试运行LiveHeader或Firebug的Firefox扩展。

你也可以设置RewriteLog和RewriteLogLevel,看看是否有帮助

尝试从你的旗帜中删除QSA; 在你的例子中,你没有提供一个初始查询string – QSA和? 在替代将结合他们,这不是你的模式所规定的; 这可能是什么东西搞砸了。 NE的使用不是担保或者给予你的模式input,但不应该引起问题。 你真的只需要[PT,T = image / $ 3]我想。

你可以通过print_or或者类似的东西向我们展示$ _GETvariables的内容吗?

你也可以向我们展示你的httpd.conf中的mod_jkconfiguration吗? 我不明白为什么你需要一个Alias指令。