我正在努力跟随this tutorial 也就是说,我可以让服务器发送类似文件的样式。css,如果请求的文件是样式。15458888.css,将重写规则放入htaccess文件中。
此规则
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+).(d+).(js|css)$ $1.$3 [L]
所以我在
head
标签:
<?php $time = filemtime(get_template_directory() .\'/assets/css/main.css\');?>
<link href="<?php echo get_template_directory_uri().\'/assets/css/main.\'.$time.\'.css\'?>" rel="stylesheet" type="text/css">
这个在
Htaccess
:
# BEGIN WordPress
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 6 hours"
ExpiresByType image/jpeg "access plus 6 hours"
ExpiresByType image/gif "access plus 6 hours"
ExpiresByType image/png "access plus 6 hours"
ExpiresByType text/css "access plus 6 hours"
ExpiresByType application/pdf "access plus 1 week"
ExpiresByType text/javascript "access plus 6 hours"
ExpiresByType text/html "access plus 10 minutes"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 3 hours"
</IfModule>
Header set X-Endurance-Cache-Level "2"
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^(.+).(d+).(js|css)$ $1.$3 [L]
</IfModule>
# END WordPress
正如您所看到的
RewriteRule ^(.+).(d+).(js|css)$ $1.$3 [L]
已添加到
</IfModule>
文件名已正确更改,如下所示:
<link href="http://ask.prosentra.com/wp-content/themes/tutorialblog/assets/css/main.1504604028.css" rel="stylesheet" type="text/css">
但服务器仍然没有实现我提到的规则。怎么了?
SO网友:user24601
您只需添加一些\\
\'并重新排序规则,使其位于“全部捕获”规则之前(将规则置于WordPress规则之上)。
你想要一个\\
在本例中的句点之前,因为您希望它与http请求中的文字句点匹配。
你想要一个\\
在d
因为我们希望它匹配任何数字,而不是字母d。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)\\.(\\d+)\\.(js|css)$ $1.$3 [L]
有了它,我们可以在文件名请求的句点之间添加任意数字,这将破坏缓存,但在服务器上它将保持相同的文件名。