繁体   English   中英

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

[英]Help convert Apache rewrite rules to PHP regular expressions

简而言之:我正在使用此技术通过使用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后处理
WordPress完成发射整个页面后,PHP正则表达式到替换值的映射在所有博客HTML上执行。 模式和替换行为采用preg_replace()的方式。

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

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

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

因此,我想知道将此重写规则转换为PHP正则表达式有多困难:

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

如果这样做甚至可以和apache重写做同样的事情。 该技术的全部目的是为CSS或JS文件及其更改时间破坏浏览器缓存,但不求助于查询字符串,这有很多缺点。

实际上,它几乎是相同的。 使用您的正则表达式,将其定界,将其放入字符串中并转义正确的内容,然后采用重写规则并使用单引号将其制成字符串,即可完成。 在您的示例中:

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

这将正确重写您提供的所有网址。 但是,听起来好像这些preg_replaces是在大型文档中完成的,这意味着您的正则表达式将无法执行您认为会做的事情。 但是,这是一个完全独立的问题。 我什至不会猜,因为我不知道您的要求是什么。 如果您需要制作正则表达式的帮助,请按照您的具体要求打开另一个问题。

另外:下次, 请检查文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM