繁体   English   中英

用否定匹配重写Lighttpd URL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM