Current I have an .htaccess file like this.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^/(always|rewrite|these|dirs)/ [NC]
RewriteRule ^(.*)$ router.php [L,QSA]
It works create when the site files are in the document_root of the webserver (ie. domain.com/abc.php
-> <DOCUMENT_ROOT>/abc.php
). But in our current setup (which isn't changeable), this isn't ensured. We can sometimes have arbitrary folder in between the document root and folder of the .htaccess file (ie. domain.com/something/abc.php
-> <DOCUMENT_ROOT>/something/abc.php
). The only problem with is that is the second RewriteCond
no longer works. Is there anyway to dynamically check if the accessed path by a path relative to .htaccess
file.
For Example:
If I have a site where domain.com/prefix/
is the directory of the .htaccess
file.
NOT FORCED TO REWRITE -> domain.com/prefix/index.php
FORCED TO REWRITE -> domain.com/prefix/rewrite/index.php
If I have a site where domain.com/
is the directory of the .htaccess
file.
NOT FORCED TO REWRITE -> domain.com/index.php
FORCED TO REWRITE -> domain.com/rewrite/index.php
Best Answer
There's a solution but it's not simple.
Use
RewriteMap
.Here's how I would do:
Create a RewriteMap file. See here for more information. This is a very simple text file with: first, the wrong URL without the '/', then one space (at least) and then the right url, like this:
Then the code:
If it doesn't work: read my usual "two hints", and add the rewrite log in your question.
Two hints:
If you're not in a hosted environment (= if it's your own server and you can modify the virtual hosts, not only the
.htaccess
files), try to use theRewriteLog
directive: it helps you to track down such problems:My favorite tool to check for regexp:
http://www.quanetic.com/Regex (don't forget to choose ereg(POSIX) instead of preg(PCRE)!)