Drupal中Image Capcha和Parallel模块冲突的解决
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]表示不匹配单引号或者双引号,加快中断匹配的速度。
(?: )也是匹配但不记录的意思。
后面图像后缀名可以灵活修改
Leave a comment