[英]Lighttpd URL rewrite with negative matching
我正在尝试重写其中包含图片但没有'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"
)
任何帮助将不胜感激,谢谢。
这应该可以帮助您入门。 如果\\w+\\.(jpg|jpeg|png|gif)
后面有字符串\\.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
编辑:
上面使用了非恒定长度的向后查找,这显然在许多平台上不受支持 。 没有这个,我不知道您是否可以在纯正则表达式中编写“当ABC在它后面的字符串中不存在时匹配XYZ”。 也许正则表达式功能比我更多的人知道一种方法。
作为一种不太通用的解决方案,这仅在图像名称之前不存在固定字符串.php?image=
时才进行检查:
模式: (?<!\\.php\\?image=)\\b(\\w+\\.(jpg|jpeg|png|gif))$
替换为: viewing.php?image=$1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.