Web Digest

还有众多网络文摘,仅供个人收藏和参考

Drupal中Image Capcha和Parallel模块冲突的解决

leave a comment »

Image Capcha是动态生成图片的,没有在目录中保存静态图片。其图片URL路径是/imagecaptcha/xxxx/xxxxx,通过服务器Rewrite模块,重定向给/index.php?q=imagecaptcha并on-the-fly生成。

Parallel模块比较简单,除去一些模版中定义的(‘styles’, ‘scripts’, ‘closure’, ‘zebra’, ‘id’, ‘directory’, ‘layout’, ‘head_title’, ‘base_path’, ‘front_page’, ‘head’, ‘body_clases’)外,就是对主要区块都对<img>标签重写服务器的根地址。由于通常cdn域名的配置不会再支持Rewrite,造成imagecaptch的图片无法生成。

解决的方法可以是修改cdn域名下的配置,或者更简单的修改parallel.module中的重写规则,让其只改写静态图片文件。

修改function parallel_image_replace 如下:

$pattern = ‘/(<img\s+|<img\s+[^>]*\s+)src\s*=\s*(\’|”)?(\/([^\/])|’ . implode(‘|’, $host_re) . ‘)(?=[^\2]*\.(?:gif|jpg|png|ico|tif|bmp))/i’;
其中最外层/ /i,不是标准正则表达式,表示忽略大小写。

(?=  )表示虽然匹配是要用,但是不记录在缓存,在后面replace时不作替换

\2 是匹配(\’|”)用的,[^\2]表示不匹配单引号或者双引号,加快中断匹配的速度。

(?:  )也是匹配但不记录的意思。

后面图像后缀名可以灵活修改

Written by admin

October 4, 2010 at 7:02 am

Posted in 水滴|Drupal

Tagged with

Leave a comment