0

短篇小说:我正在使用这种技术通过使用 filemtime() 在文件名中添加一个字符串来自动版本化我的 css 和 js 文件: http ://w-shadow.com/blog/2012/07/30/automatic-versioning -of-css-js/

我在我的本地机器(MAMP)上启动并完美运行,但我使用 WP Engine 进行托管,它们是在 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 文件的浏览器缓存以及更改它们的时间,但不求助于具有各种缺点的查询字符串。

4

1 回答 1

0

实际上,它几乎是一样的。使用您的正则表达式,对其进行分隔,将其放入字符串中并转义正确的内容,然后使用您的重写规则并使用单引号将其变为字符串,您就完成了。在您的示例中:

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

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

另外:下次,检查文档。

于 2012-09-20T04:36:39.667 回答