0

我正在尝试重写其中包含图像但没有“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"
)

任何帮助将不胜感激,谢谢。

4

1 回答 1

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,这在很多平台上显然是不支持的。如果没有这个,我不知道您是否可以在纯正则表达式中编写“当 ABC 不在其后面的字符串中时匹配 XYZ”。也许比我有更多正则表达式的人知道一种方法。

作为一种不太通用的解决方案,这将仅检查固定字符串.php?image=是否位于图像名称之前:

图案:(?<!\.php\?image=)\b(\w+\.(jpg|jpeg|png|gif))$

代替:viewing.php?image=$1

于 2012-08-21T18:13:35.403 回答