htaccess not properly rewriting urls
- by Cameron Ball
This is a bit of a weird one. I'm doing some work on a server, and I need rewrite rules for directories that actually exist (in some cases, they are more than one level deep)
At the moment my .htaccess looks like this:
RewriteEngine on
RewriteRule ^simfiles/([-\ a-zA-Z0-9:/]+)$ http://mydomain.com/?portal=simfiles&folder=$1 [L]
And this is working OK, for example, a url like:
mydomain.com/sifmiles/my-files
Will get redirected to
mydomain.com/?portal=simfiles&folder=my-files
Or in the case of a directory structure that is deeper than one level:
mydomain.com/sifmiles/my-files/more-of-my-files
Will get redirected to
mydomain.com/?portal=simfiles&folder=my-files/more-of-my-files
I wrote the regex so that it won't match things with a . in the path, because there are css and js files which reside in simfiles/somedirectory, and if I redirect everything then these cannot be loaded.
I tried a configuration like this:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^simfiles/([-\ a-zA-Z0-9:/\.]+)$ http://mydomain.com/?portal=simfiles&folder=$1 [L]
But that doesn't work, things still don't load properly.
So my first question is, how can I achieve this "properly"? I don't like my solution because it means redirects won't occur if the folder has a . in its name.
My second problem, is that while the redirection is happening properly, the url becomes:
http://mydomain.com/?portal=simfiles&folder=my-files
I want the URL to remain clean, like:
http://mydomain.com/sifmiles/my-files
How can I achieve this?