views:

38

answers:

2

How can I look for an instance for certain file extensions, like .(jpg|png|css|js|php), and if there is NOT a match send it to index.php?route=$1.

I would like to be able to allow period's for custom usernames.

So, rewrite http://example.com/my.name to index.php?route=my.name

Current setup:

.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^.]+)$ index.php?route=$1 [QSA,L]
</IfModule>

What works:
http://example.com/userpage -> index.php?route=userpage
http://example.com/userpage/photos -> index.php?route=userpage/photos
http://example.com/file.js -> http://example.com/file.js
http://example.com/css/file.css -> http://example.com/css/file.css

What I need to work in addition to above:
http://example.com/my.name -> index.php?route=my.name

A: 

Have you tried reversing the logic? Something like

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule \.(jpg|png|css|js)$ - [L]

This will not do a rewrite for any file with a .jpg, .png, .css, or .js extension. Then add your existing rules so that non-file, non-directory requests get rerouted to index.php.

Harper Shelby
Thanks for the input Harper, this helped me get it solved
wdavis
A: 

Add an extra RewriteCond to exclude the conditions that you don't want rewritten. Use a ! before the regular expression to indicate that any files matching should fail the condition. The RewriteCond below is untested, but should give you an idea of what you need:

RewriteCond %{REQUEST_URI} !\.(jpg|png|css|js|php)$
Dingo
Tried this and it makes sense, but it is not working!
wdavis
Combine this with _allowing_ a dot in names/routes (so, replacing `[^.]` with `.` in the original `RewriteRule` from your question). A.t.m, you forcefully don't allow a dot there, so of course it's not going to work.
Wrikken
Ah, you are right Wrikken. Modified the rule and it came together. I really appreciate the help guys
wdavis