2012-08-05 33 views
5

Tôi hiện đang cố gắng gói javascript của tôi để tôi có thể nhận được điểm số cao hơn ở tốc độ trang/yslow. Nhưng tôi đang chạy vào tường với cách tiếp cận này. Tôi hiện đang sử dụng hướng dẫn này để đính kèm các tệp js TUTORIAL. Tôi đang gọi các tập tin js nhưng trong công cụ firefox là hiển thị rằng các tập tin bundle.js không tồn tại đó là đúng, nhưng với htaccess tôi đang chaning các tập tin từ bundle.php đến bundle.js. Nhưng tôi không nhận được bất kỳ kết quả nào. Ai đó có thể giúp tôi xác định vấn đề hoặc có cách tiếp cận tốt hơn để gộp các tệp js không?Kết nối javascript với htaccess và php

ĐÂY là của tôi EXAMPLE. Khi làm việc đúng cách với các tệp js, nó sẽ hiển thị 4 trường nhập để tải lên tệp.

Đây là cách tôi gọi js file

<script src='core/bundle.js?js=js/jquery-ui-1.8rc2.custom.min.js,js/globalFunctions.js,js/uploaderPreviewer.js,js/itemForm.js&amp;m=4948599067'> 
</script> 

.htacces thay đổi loại tập tin *

RewriteEngine on 
RewriteRule ^bundle.js$ bundle.php [QSA,L] 

lõi/bundle.php

include "JSMin.php"; 
$path = "../../"; 
$files = explode(",", $_GET['js']); 
$missing = array(); 

$cache = ''; 
foreach ($files as $index => $file) { 
    if (strtolower(substr($file, -2)) != 'js') { 
     unset($files[$index]); 
    } else if (file_exists($path.$file)) { 
     $cache .= $file; 
     $cache .= filemtime($path.$file); 
    } else { 
     $missing[] = $file; 
     unset($files[$index]); 
    } 
} 

$cache = 'cache/'.md5($cache); 

if (count($missing)) { 
    header("Content-type: text/javascript"); 
    header("Pragma: no-cache"); 
    header("Cache-Control: no-cache"); 
    echo "alert('Could not load the following javascript source files:\\n\\n- ".implode("\\n- ", $missing)."\\n\\nJavascript not loaded/running!');"; 
    exit; 
} 

if (count($files)) { 
    // create cached version if not present 
    if (!file_exists($cache)) { 
     $js = ''; 
     foreach ($files as $file) { 
      $js .= JSMin::minify(file_get_contents($path.$file)); 
     } 

     file_put_contents($cache, $js); 
    } 

    // calculate last-modified & etag send caching headers 
    $last_modified_time = filemtime($cache); 
    $etag = md5_file($cache); 

    header("Content-type: text/javascript"); 
    header("Pragma: public"); 
    header("Cache-Control: public"); 
    header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); 
    header("Etag: ".$etag); 

    if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time || trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) { 
     header("HTTP/1.1 304 Not Modified"); 
     exit; 
    } 

    readfile($cache); 
} 
+0

Bạn có thể thử với lõi/bundle.php tức thì của core/bundle.js không? Nếu nó hoạt động, sau đó .htaccess có thể có vấn đề. –

+0

Nó sẽ là tốt để đề cập rằng 'if (strtolower (substr ($ file, -2))! = 'Js') {' là mã dễ bị tổn thương. Ví dụ: '.htpasswd% 00js' trong đó'% 00' là một byte rỗng, sẽ vượt qua tình trạng của bạn và nó sẽ được hiểu là '.htpasswd' bởi hệ điều hành. Xem [this] (https://www.owasp.org/index.php/File_System#Path_traversal) và [that] (https://www.owasp.org/index.php/Path_Traversal) để biết thêm thông tin. – HoLyVieR

+0

Bạn có thể tải php dưới dạng js, thay vì gọi bundle.js, chỉ cần đặt