我正在尝试重写其中包含图片而不是“php”的网址,例如:
我想匹配这个:
http://domain.com/trees.jpg
并将其重写为:
http://domain.com/viewimg.php?image=trees.jpg
但不符合这个:
http://domain.com/index.php?image=trees.jpg
因为它中有'php',所以它不应该对该URL进行任何重写。
我对正则表达式并不擅长,但我一直在尝试各种变体,但没有一个有效。 这是我尝试过的一种变体的例子:
url.rewrite-once = (
"(?!php\b)\b\w+\.(jpg|jpeg|png|gif)$" => "/viewimg.php?image=$1.$2"
)
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
这应该让你开始。如果\.php
\w+\.(jpg|jpeg|png|gif)
,则匹配失败
模式:(?<!.*\.php.*)\b(\w+\.(jpg|jpeg|png|gif))$
替换:viewing.php?image=$1
测试:
http://domain.com/trees.jpg ---> http://domain.com/viewing.php?image=trees.jpg
http://domain.com/index.php/trees.jpg ---> http://domain.com/index.php/trees.jpg
http://domain.com/index.php/image=trees.jpg ---> http://domain.com/index.php/image=trees.jpg
修改强>
上面使用非恒定长度的lookbehind,显然是not supported on many platforms。如果没有这个,我不知道你是否可以在纯正则表达式中编写“匹配XYZ,当ABC在它背后的字符串中无处”时。也许比我更有正则表达能力的人知道一种方式。
作为一种不那么通用的解决方案,这只会检查固定字符串.php?image=
是否在图像名称之前:
模式:(?<!\.php\?image=)\b(\w+\.(jpg|jpeg|png|gif))$
替换:viewing.php?image=$1