我在PHP生成的javascript文件上遇到了expires
标题的问题。
该网站有两种类型的javascript文件。一部分是静态javascript文件,一部分是由PHP动态生成的。
此处expires
文件中没有添加.js
标题(所有文件都返回HTTP 200
)
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include /var/ini/nginx/fastcgi.conf;
fastcgi_pass php;
fastcgi_param SCRIPT_FILENAME /var/www/index.php;
}
为.js
文件添加位置时,所有动态生成的文件都会返回HTTP 404
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
include /var/ini/nginx/fastcgi.conf;
fastcgi_pass php;
fastcgi_param SCRIPT_FILENAME /var/www/dyndev.dk/public/secure/index.php;
}
location ~ \.(js|css)$ {
expires 1y;
add_header Cache-Control "public";
}
如何使用.js
标题处理静态和动态生成的expires
文件?
所有动态生成的javascript文件都命名为*-php.js
/var/www/public/index.php # All none-static file requests are pointed to index.php
/var/www/public/js/main.js # Static files
/var/www/js-dynamically_generated.php # This file is outside the public www, but is routed by PHP since the file doesn't exists inside the public /js
www.example.com/ -> index.php
www.example.com/js -> static content
www.example.com/js/dynamically_generated-php.js -> js-dynamically_generated.php
答案 0 :(得分:6)
对于nginx,PHP绝不是Javascript。 Nginx无法区分呈现html的PHP和呈现javascript的PHP(如果我错了请纠正我)。
所以要做的就是设置一个单独的文件夹,其中包含生成所有JS的PHP文件(代码未经过测试!):
location ~ \normal_php/.php$ {
include /var/ini/nginx/fastcgi.conf;
fastcgi_pass php;
fastcgi_param SCRIPT_FILENAME /var/www/dyndev.dk/public/secure/index.php;
}
location ~ \js_php/.php$ {
expires 1y;
add_header Cache-Control "public";
include /var/ini/nginx/fastcgi.conf;
fastcgi_pass php;
fastcgi_param SCRIPT_FILENAME /var/www/dyndev.dk/public/secure/index.php;
}
...或者用PHP本身发送标题:
<?php
header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60))); // 1 hour