2015-11-19 53 views
7

我有對JavaScript文件expires頭這是由PHP產生的問題過期了nginx的與JavaScript文件(由PHP動態生成)

該網站有兩種類型的JavaScript文件。一部分是靜態JavaScript文件,另一部分是由PHP動態生成的。

的conf沒有Expires頭

這裏沒有expires頭文件(所有文件返回HTTP 200)加入到.js文件

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; 
} 

的conf與Expires頭

.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"; 
} 

如何使用expires頭文件處理靜態和動態生成的.js文件?

所有動態genereated 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 

PHP路由

www.example.com/ -> index.php 
www.example.com/js -> static content 
www.example.com/js/dynamically_generated-php.js -> js-dynamically_generated.php 
+1

如果你用php創建js爲什麼你不用PHP函數添加標題? – Kiyan

+0

已更新我的問題 – clarkk

回答

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 
+0

但是,如何將'expires'標題放在.js文件中?問題是,當我爲.js文件添加位置時,所有動態生成的.js文件都會返回「404」。在第二個conf中看到我的問題 – clarkk

+0

或者你是說所有php生成的js文件應該被命名爲'dynamic_js.php'而不是'dynamic_js-php.js' – clarkk

+0

是的,第二個評論。通過構建作業生成資產會更好,因此您可以使用PHP腳本來生成靜態.js文件。 – DanFromGermany