JavaScript не анализируется при перезаписи мода через файл PHP? - PullRequest
0 голосов
/ 26 декабря 2010

Если я сделаю следующее (это фактический / прямой путь к файлу JavaScript):

<script href="http://localhost/tpl/blue/js/functions.js" type="text/javascript"></script>

Он отлично работает, и JavaScript анализирует - так же, как и его значение.

Однако я хочу сократить путь к файлу JavaScript (так же как и кешированию), поэтому я переписываю все файлы JavaScript через .htaccess в cache.php (который обрабатывает кэширование).

.htaccess содержит следующее:

<IfModule mod_rewrite.c> 
RewriteEngine On

RewriteBase /

RewriteRule ^js/(.+?\.js)$ cache.php?file=$1 [NC] 
</IfModule>

cache.php содержит следующий код PHP:

<?php

if (extension_loaded('zlib')) {
    ob_start('ob_gzhandler');
}

$file = basename($_GET['file']);

if (file_exists("tpl/blue/js/".$file)) {
header("Content-Type: application/javascript");
header('Cache-Control: must-revalidate');
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');

echo file_get_contents("tpl/blue/js/".$file);

}

?>

и я вызываю файл JavaScript примерно так:

<script href="http://localhost/js/functions.js" type="text/javascript"></script>

Но при этом JavaScript не анализируется? (если я позже вызываю функции, которые находятся внутри functions.js на странице, они не работают), - так это их проблема либо с cache.php, либо с правилом перезаписи? (потому что файл сам по себе работает нормально).

Если я получаю доступ к переписанному файлу -> http://localhost/js/functions.js напрямую, он печатает код JavaScript, как любой файл JavaScript, - поэтому я не понимаю, что я делаю неправильно ...

PS: Я пытался изменить mime / content-type на text / javascript, а также очистить кеш браузера - но не повезло.

Вся помощь приветствуется! :)

Ответы [ 3 ]

1 голос
/ 26 декабря 2010

Я думаю, что ваше решение нелепо, учитывая ваши заявленные цели.Сохраняйте это простым.

Я хочу сократить путь к файлу JavaScript

Почему?В чем проблема с длинными путями?

(также как и некоторые кеширования)

Хорошая цель.Но вы видели mod_expires?Включите его и вставьте в свой .htaccess

 <IfModule mod_expires.c>
   ExpiresActive on
   ExpiresByType text/javascript "access plus 1 days"
  </IfModule>

Готово.

А также, Apache, обслуживающий статический файл, работает намного быстрее, чем apache, запускающий весь процесс PHP, который затем выполняетстатический файл, не говоря уже (как вы выяснили), менее подвержен ошибкам.

Правила простоты!

0 голосов
/ 26 декабря 2010

Обязательно отправьте правильный заголовок типа контента из cache.php, например, с

header('Content-Type: text/javascript');

Это необходимо, потому что ваш веб-сервер думает, что он обслуживает скрипт PHP, и по конфигурации ему говорят, что по умолчанию такой скрипт выводится как text / html или text / plain. Поэтому он добавляет один из этих типов контента, если только вы сами не отправите его из сценария.

0 голосов
/ 26 декабря 2010

Тип содержимого должен быть text/javascript, а не application/javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...