帮助将Apache重写规则转换为PHP正则表达式

时间:2012-09-19 21:59:56

标签: regex

简短的故事:我使用这种技术通过使用filemtime()在文件名中添加一个字符串来自动编辑我的css和js文件: http://w-shadow.com/blog/2012/07/30/automatic-versioning-of-css-js/

我在我的本地机器(MAMP)上完成并运行完美,但是我使用WP引擎进行托管,它们在nginx上设置并且不支持.htaccess重写规则。

他们确实有一个输入PHP正则表达式(preg_replace)的地方,他们的指示如下:

  

HTML后处理
  PHP正则表达式到替换值的映射,这些替换值在WordPress完成发布整个页面后在所有博客HTML上执行。模式和替换行为采用preg_replace()的方式。

     

以下示例删除第一个模式中的所有HTML注释,并导致在第二个模式中从另一个域加载favicon(具有任何文件扩展名):

     

#<!--.*?-->#s =>

     

#\bsrc="/(favicon\..*)"# => src="http://mycdn.somewhere.com/$1"

。所以我想知道将这个重写规则转换为PHP正则表达式是多么困难:

RewriteRule ^(.*)\.[\d]{10}\.(css|js)$ $1.$2 [L]

如果这甚至会和apache重写做同样的事情。该技术的重点是破坏css或js文件的浏览器缓存以及更改它们的时间,但不会诉诸查询字符串,这会产生各种缺点。

1 个答案:

答案 0 :(得分:0)

实际上,它几乎是一样的。拿你的正则表达式,分隔它,把它放在一个字符串中并逃避正确的事情,然后采取你的重写规则并使用单引号使它成为一个字符串,你就完成了。在您的示例中:

$newUrl = preg_replace('/^(.*)\\.[\\d]{10}\\.(css|js)$/', '$1.$2', $url);

这将正确地重写你给它的任何url。但是,听起来这些preg_replaces是在大型文档中完成的,这意味着你的正则表达式不会按照你的想象做到。然而,这是一个完全独立的问题。一个我甚至都不会猜到,因为我不知道你的要求是什么。如果您需要帮助制作正则表达式,请根据您的具体要求打开另一个问题。

另外:下次Check the documentation.