2009年7月24日星期五

Re: [fw-mvc] Rewriting .htaccess Problem with JS and CSS Compression

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iEYEARECAAYFAkppn4sACgkQadOAzz84lo8EowCeNoVzAgwbu+1+2IxRD3n82LwL
KeMAoIxaF4MRZJGqqJ0bGVsyaqQiKzlt
=odcH
-----END PGP SIGNATURE-----
Have you tried to move last two lines to the top of the file ?
Remember, that :
[L] is "last rule"
Server checks rules in the order they are in the file, so it won't
find last rule ever.

It in my opinion should look like that :
RewriteEngine On
RewriteRule ^css/(.*\.css) /combine.php?type=css&files=$1 [L]
RewriteRule ^js/(.*\.js) /combine.php?type=javascript&files=$1 [L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ – [NC,L]
RewriteRule ^.*$ /index.php [NC,L]

Andrew Pace <andrewppace@gmail.com>
[Wed, 22 Jul 2009 11:30:00 -0700] :

> Hi all,
>
> Thank you in advance for your help. I am trying to use a nice
> compression file for compressing CSS and Javascript files
> using .htaccess and a combine.php script. My current .htaccess looks
> like:
>
> RewriteEngine On
> RewriteCond %{REQUEST_FILENAME} -s [OR]
> RewriteCond %{REQUEST_FILENAME} -l [OR]
> RewriteCond %{REQUEST_FILENAME} -d
> RewriteRule ^.*$ – [NC,L]
> RewriteRule ^.*$ /index.php [NC,L]
> RewriteRule ^css/(.*\.css) /combine.php?type=css&files=$1
> RewriteRule ^js/(.*\.js) /combine.php?type=javascript&files=$1
>
> my file structure is:
> /index.php
> /js/(javascript files)
> /css/(css files)
> /cache/(caching files)
>
> As you can see, the bottom two lines are the lines of the .htaccess
> are different than the recommended Zend Framework .htaccess.
>
> In the non-ZF environment, the following .htaccess is recommended:
>
> RewriteEngine On
> RewriteBase /
> RewriteRule ^css/(.*\.css) /combine.php?type=css&files=$1
> RewriteRule ^javascript/(.*\.js) /combine.php?type=javascript&files=$1
>
> Unfortunately, the .htaccess I am currently using isn't working
> right. The files are not being created. Any ideas?
>
> I have copied and pasted the combine.php script below, as it is a
> useful resource (more useful if I get it working right :) haha).
>
> Thanks,
>
> Andrew
>
> PS: If you have better methods of compressing CSS and JS files, let me
> know.
>
>
>
>
>
>
>
>
>
>
> COMBINE.PHP
>
> <?php
>
> /
> ************************************************************************
> * CSS and Javascript Combinator 0.5
> * Copyright 2006 by Niels Leenheer
> *
> * Permission is hereby granted, free of charge, to any person
> obtaining
> * a copy of this software and associated documentation files
> (the
> * "Software"), to deal in the Software without restriction,
> including
> * without limitation the rights to use, copy, modify, merge,
> publish,
> * distribute, sublicense, and/or sell copies of the Software,
> and to
> * permit persons to whom the Software is furnished to do so,
> subject to
> * the following conditions:
> *
> * The above copyright notice and this permission notice shall be
> * included in all copies or substantial portions of the
> Software. *
> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
> KIND,
> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
> WARRANTIES OF
> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
> HOLDERS BE
> * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
> AN ACTION
> * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> CONNECTION
> * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> SOFTWARE. */
>
>
> $cache = true;
> $cachedir = dirname(__FILE__) . '/cache';
> $cssdir = dirname(__FILE__) . '/css';
> $jsdir = dirname(__FILE__) . '/js';
>
> // Determine the directory and type we should use
> switch ($_GET['type']) {
> case 'css':
> $base = realpath($cssdir);
> break;
> case 'javascript':
> $base = realpath($jsdir);
> break;
> default:
> header ("HTTP/1.0 503 Not Implemented");
> exit;
> };
>
> $type = $_GET['type'];
> $elements = explode(',', $_GET['files']);
>
> // Determine last modification date of the files
> $lastmodified = 0;
> while (list(,$element) = each($elements)) {
> $path = realpath($base . '/' . $element);
>
> if (($type == 'javascript' && substr($path, -3) !=
> '.js') || ($type == 'css' && substr($path, -4) != '.css')) {
> header ("HTTP/1.0 403 Forbidden");
> exit;
> }
>
> if (substr($path, 0, strlen($base)) != $base
> || !file_exists($path)) { header ("HTTP/1.0 404 Not Found");
> exit;
> }
>
> $lastmodified = max($lastmodified, filemtime($path));
> }
>
> // Send Etag hash
> $hash = $lastmodified . '-' . md5($_GET['files']);
> header ("Etag: \"" . $hash . "\"");
>
> if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
> stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) == '"' .
> $hash . '"') {
> // Return visit and no modifications, so do not send
> anything header ("HTTP/1.0 304 Not Modified");
> header ('Content-Length: 0');
> }
> else
> {
> // First time visit or files were modified
> if ($cache)
> {
> // Determine supported compression method
> $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'],
> 'gzip'); $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate');
>
> // Determine used compression method
> $encoding = $gzip ? 'gzip' : ($deflate ?
> 'deflate' : 'none');
> // Check for buggy versions of Internet Explorer
> if (!strstr($_SERVER['HTTP_USER_AGENT'],
> 'Opera') && preg_match('/^Mozilla\/4\.0 \(compatible; MSIE
> ([0-9]\.[0-9])/i', $_SERVER['HTTP_USER_AGENT'], $matches)) {
> $version = floatval($matches[1]);
>
> if ($version < 6)
> $encoding = 'none';
>
> if ($version == 6
> && !strstr($_SERVER['HTTP_USER_AGENT'], 'EV1')) $encoding = 'none';
> }
>
> // Try the cache first to see if the combined
> files were already generated
> $cachefile = 'cache-' . $hash . '.' . $type .
> ($encoding != 'none' ? '.' . $encoding : '');
>
> if (file_exists($cachedir . '/' . $cachefile)) {
> if ($fp = fopen($cachedir . '/' .
> $cachefile, 'rb')) {
>
> if ($encoding != 'none') {
> header
> ("Content-Encoding: " . $encoding); }
>
> header ("Content-Type: text/" .
> $type); header ("Content-Length: " . filesize($cachedir . '/' .
> $cachefile));
>
> fpassthru($fp);
> fclose($fp);
> exit;
> }
> }
> }
>
> // Get contents of the files
> $contents = '';
> reset($elements);
> while (list(,$element) = each($elements)) {
> $path = realpath($base . '/' . $element);
> $contents .= "\n\n" . file_get_contents($path);
> }
>
> // Send Content-Type
> header ("Content-Type: text/" . $type);
>
> if (isset($encoding) && $encoding != 'none')
> {
> // Send compressed contents
> $contents = gzencode($contents, 9, $gzip ?
> FORCE_GZIP : FORCE_DEFLATE);
> header ("Content-Encoding: " . $encoding);
> header ('Content-Length: ' . strlen($contents));
> echo $contents;
> }
> else
> {
> // Send regular contents
> header ('Content-Length: ' . strlen($contents));
> echo $contents;
> }
>
> // Store cache
> if ($cache) {
> if ($fp = fopen($cachedir . '/' . $cachefile,
> 'wb')) { fwrite($fp, $contents);
> fclose($fp);
> }
> }
> }
>


ß
Rafał (ert16) Trójniak
m@il : ert256@gmail.com
Jid : ert256@gmail.com
GPG key-ID : 3F38968F
4711 E3BC B674 C841 BED8
0F8F 69D3 80CF 3F38 968F

没有评论: