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
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)!)
Does Forced to rewrite means that the rewrite rule should work even if requested file or directory exists?
If yes, just try to avoid creating the file / directory.
Or seperate it to two rules:
If I do understand you correctly (particularly I don't know what you mean with forced to rewrite),
RewriteBase
is for you.BTW: don't use stuff like domain.com :-)