I need to change my .htaccess
and there are two lines which I don't understand.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
When I should use these lines ?
I need to change my .htaccess
and there are two lines which I don't understand.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
When I should use these lines ?
This will capture requests for files like
version
,release
, andREADME.md
, etc. which should be treated either as endpoints, if defined (as in the case of /release), or as "not found."Not the place to give a complete tutorial, but here it is in short;
RewriteCond basically means "execute the next RewriteRule only if this is true". The
!-l
path is the condition that the request is not for a link (!
means not,-l
means link)The RewriteRule basically means that if the request is done that matches
^(.+)$
(matches any URL except the server root), it will be rewritten asindex.php?url=$1
which means a request forolle
will be rewritten asindex.php?url=olle
).QSA
means that if there's a query string passed with the original URL, it will be appended to the rewrite (olle?p=1
will be rewritten asindex.php?url=olle&p=1
.L
means if the rule matches, don't process any more RewriteRules below this one.For more complete info on this, follow the links above. The rewrite support can be a bit hard to grasp, but there are quite a few examples on stackoverflow to learn from.
If the following conditions are true, then rewrite the URL:
If the requested filename is not a directory,
and if the requested filename is not a regular file that exists,
and if the requested filename is not a symbolic link,
then rewrite the URL in the following way:
Take the whole request filename and provide it as the value of a "url" query parameter to index.php. Append any query string from the original URL as further query parameters (QSA), and stop processing this .htaccess file (L).