简短的故事:我使用这种技术通过使用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文件的浏览器缓存以及更改它们的时间,但不会诉诸查询字符串,这会产生各种缺点。
答案 0 :(得分:0)
实际上,它几乎是一样的。拿你的正则表达式,分隔它,把它放在一个字符串中并逃避正确的事情,然后采取你的重写规则并使用单引号使它成为一个字符串,你就完成了。在您的示例中:
$newUrl = preg_replace('/^(.*)\\.[\\d]{10}\\.(css|js)$/', '$1.$2', $url);
这将正确地重写你给它的任何url。但是,听起来这些preg_replaces是在大型文档中完成的,这意味着你的正则表达式不会按照你的想象做到。然而,这是一个完全独立的问题。一个我甚至都不会猜到,因为我不知道你的要求是什么。如果您需要帮助制作正则表达式,请根据您的具体要求打开另一个问题。