Apache mod_rewrite复杂的URL正则表达式

时间:2015-01-20 05:50:20

标签: regex apache mod-rewrite

我想通过以下网址制作精美的网址:

http://example1.com/cimage/webroot/img.php?src=http://example.com/img1.jpg&w=600&h=800&q=60&sharpen&crop-to-fit

所以结果网址必须是这样的:

http://example1.com/cimage/webroot/img.php/http://example2.com/img1.jpg/600*800/60/sharpen/crop-to-fit

现在我的问题创建了一个在apache mod_rewrite中使用的正则表达式。 请帮帮我。感谢...

1 个答案:

答案 0 :(得分:0)

根据评论中的讨论,这是解决方案:

RewriteRule ^img.php/(https?):/+(.+?(?:\.jpg|\.png))/(\d+)/(\d+)/(\d+)/?([^\/]*)/?([^\/]*)/?‌​([^\/]*)$ img.php?src=$1://$2&w=$3&h=$4&q=$5&$6&$7&$8

Demo

此处的逻辑是匹配字符串开头的img.php/,然后匹配httphttps:,一个或多个/ s ,主机和文件名,然后是尺寸,质量等的各种参数。

在没有复杂正则表达式的情况下处理此问题的另一种方法是执行一个简单的全能规则:

RewriteRule ^img.php\/(.+) img.php?url=$1

然后你可以在PHP中进行解析,主要是在PHP代码中使用更简单的操作,如explode()。这种方法很有意义,特别是如果可能有额外的操作/参数;否则,你的正则表达式开始有一个很多捕获组,使其难以阅读和维护。