Quantcast

[Cherokee] Need help rewriting non-existent URLs

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[Cherokee] Need help rewriting non-existent URLs

Daniel Lo Nigro-2
Hi everyone,
 I'm trying to move one of my sites from Apache to Cherokee. I've nearly got it working but I'm stuck on one of the rewrite rules. The directory js/combined has a .htaccess file containing:

ExpiresActive on
ExpiresDefault "access plus 1 month"

RewriteEngine on

# Rewrite non-existent URLs to the combiner, to create a new combined file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (\d+).js combine.php?set=site&v=$1 [L]

I use this for "lazy JavaScript minification". Basically, when a user hits /js/combined/123.js and 123.js doesn't exist yet, it goes through the combine.php script. The combine.php script combines and minifies all the JavaScript files used by the site, outputs them to the correct file name (123.js) and then serves the file itself. After this is done, every user gets the file directly (as it now exists). I've got a deployment script that deploys the site and increments the "version number" used in the JS URLs. it seems to be working quite well on Apache.

However, on Cherokee I can't get it working. I've tried the following rules:
1. Extension php - FastCGI, Non-final, cache turned off
2. Directory /js/combined AND File Exists - List & Send, gzip, IO cache turned off (for debugging), Final
3. Directory /js/combined - Rewrite, Final
    - Internal, (\d+).js$ to /js/combined/combine.php?set=site&v=$1

In theory the "file exists" rule should serve the existing files, as it's marked as "final". However this isn't happening and every request is going through the combine.php script. 

I've tried the following rules with the same result:
1. Extension php - FastCGI, Non-final, cache turned off
2. Directory /js/combined AND NOT File Exists - Rewrite, Final,  IO cache turned off (for debugging)
    - Internal, (\d+).js$ to /js/combined/combine.php?set=site&v=$1
3. Directory /js/combined - List & Send, gzip, Final

In this case, every file still seems to be going through the combine.php script as well!? In either scenario, turning off the rewrite serves existing files correctly, but obviously non-existent URLs don't work.

tl,dr: I want to rewrite a URL in a directory only when the file doesn't exist, but am having issues with that.

Any suggestions?

--
Regards,
Daniel Lo Nigro
http://dan.cx/ | http://twitter.com/Daniel15

_______________________________________________
Cherokee mailing list
[hidden email]
http://lists.octality.com/listinfo/cherokee
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: [Cherokee] Need help rewriting non-existent URLs

Daniel Lo Nigro-2
I seem to have fixed it by rearranging the rules as:

1. File exists without Directory rule (used to be the default handler), Final
2. Redirect rule for non-existent files
3. Change default rule to HTTP error (404)

Do "File exists" rules not work when combined via AND with "Directory" rules?

On Sat, Feb 11, 2012 at 9:08 PM, Daniel Lo Nigro <[hidden email]> wrote:
Hi everyone,
 I'm trying to move one of my sites from Apache to Cherokee. I've nearly got it working but I'm stuck on one of the rewrite rules. The directory js/combined has a .htaccess file containing:

ExpiresActive on
ExpiresDefault "access plus 1 month"

RewriteEngine on

# Rewrite non-existent URLs to the combiner, to create a new combined file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (\d+).js combine.php?set=site&v=$1 [L]

I use this for "lazy JavaScript minification". Basically, when a user hits /js/combined/123.js and 123.js doesn't exist yet, it goes through the combine.php script. The combine.php script combines and minifies all the JavaScript files used by the site, outputs them to the correct file name (123.js) and then serves the file itself. After this is done, every user gets the file directly (as it now exists). I've got a deployment script that deploys the site and increments the "version number" used in the JS URLs. it seems to be working quite well on Apache.

However, on Cherokee I can't get it working. I've tried the following rules:
1. Extension php - FastCGI, Non-final, cache turned off
2. Directory /js/combined AND File Exists - List & Send, gzip, IO cache turned off (for debugging), Final
3. Directory /js/combined - Rewrite, Final
    - Internal, (\d+).js$ to /js/combined/combine.php?set=site&v=$1

In theory the "file exists" rule should serve the existing files, as it's marked as "final". However this isn't happening and every request is going through the combine.php script. 

I've tried the following rules with the same result:
1. Extension php - FastCGI, Non-final, cache turned off
2. Directory /js/combined AND NOT File Exists - Rewrite, Final,  IO cache turned off (for debugging)
    - Internal, (\d+).js$ to /js/combined/combine.php?set=site&v=$1
3. Directory /js/combined - List & Send, gzip, Final

In this case, every file still seems to be going through the combine.php script as well!? In either scenario, turning off the rewrite serves existing files correctly, but obviously non-existent URLs don't work.

tl,dr: I want to rewrite a URL in a directory only when the file doesn't exist, but am having issues with that.

Any suggestions?

--
Regards,
Daniel Lo Nigro
http://dan.cx/ | http://twitter.com/Daniel15


_______________________________________________
Cherokee mailing list
[hidden email]
http://lists.octality.com/listinfo/cherokee
Loading...