Apache URL重写有点复杂

时间:2015-09-23 15:27:00

标签: apache .htaccess url-rewriting

我想根据特定型号重写网址。 从:

http://myhost/aa/bb/value1?var2=value2&var3=value3

要:

http://myhost/aa/bb/index/index?var1=value1&var2=value2&var3=value3
  • value1:[:0-9TZ-]
  • value2:[0-9]
  • value3:[0-9]

这是我认为很好的解决方案:

RewriteRule ^/?([\:0-9TZ-]*)\?(.*)$ /aa/bb/index/index?var1=$1&$2 [R,L]

但是,这是我得到的错误(我单独尝试了每一个):

  • :给我404错误(aa / bb / 2015-09-15T10:00Z未找到)
  • \?(。*)$ & $ 2 :给我404错误(找不到aa / bb / 2015-09-15T1000Z,而我是寻找http://myhost/aa/bb/2015-09-15T1000Z?count=2

但是如果我尝试使用它会有效:

RewriteRule ^/?([0-9TZ-]*) /aa/bb/index/index?var1=$1 [R,L]

http://myhost/aa/bb/2015-09-15T1000Z

任何帮助都会非常感激。

昆汀

1 个答案:

答案 0 :(得分:2)

您无法在重写规则中与查询字符串进行匹配,但由于您根本没有更改查询字符串,因此您只需使用第二次尝试并包含QSA标记即可查询字符串被追加:

RewriteRule ^/?([0-9TZ:-]*) /aa/bb/index/index?var1=$1 [R,L,QSA]

您还可以在方括号中包含:来捕获冒号。在通过重写规则发送URI之前,任何URL编码都会被解码。