我用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指令。