我使用 mod_rewrite 注册了一个 RewriteRule,但是替换的 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
应用的规则重定向到:
http://localhost/image-servlet/img/ABC
最终的 URL 缺少查询字符串替换:
?z=$1&url=$2
并替换为:
$2
有人能帮助我纠正我的错误吗?
感谢,
过去
答案1
我知道这很丑陋,甚至效率更低,但是你尝试过吗:
重写规则 ^/img/z(.+)u(.+)\.(.+)$ /image-servlet/img/?z=$1&url=$2 [NE,QSA,PT,T=image/$3]
我似乎记得 mod_rewrite 只会将 (.+) 或 (.*) 与变量匹配。显然(从您的示例来看),这是唯一正确重写的内容。
当然,mod_rewrite 规则将永远匹配,并要求脚本进行一些输入验证。
此外,apache 支持 TRACE http 命令,该命令非常适合追踪多次(意外)重写。只需将 http 请求中的 GET 替换为 TRACE,例如:
跟踪/z1uABC.jpg HTTP/1.1
主机:foohost.com
最后,如果您仍然遇到问题,请尝试运行 LiveHeader 或 Firebug Firefox 扩展。
答案2
您还可以设置重写日志和 RewriteLogLevel 看看是否有帮助
答案3
尝试从你的标志中删除 QSA;在你的例子中,你是不是呈现初始查询字符串 -- QSA 和替换中的 ? 会将它们组合起来,这不是您的模式所规定的;这可能是搞砸事情的原因。考虑到您的模式输入,使用 NE 也是没必要的,但它不应该造成问题。我认为您真的只需要 [PT,T=image/$3]。
答案4
您还可以向我们展示 httpd.conf 中的 mod_jk 配置吗?我不明白为什么需要 Alias 指令。