We want to redirect all URIs to a PHP script. The redirection will be internal, so the client, for example, a browser, will not see that a redirection has occurred. To do this, we create in the document root an .htaccess file that contains these rules:
# Enable rewrite engine Options +FollowSymLinks RewriteEngine On
# Redirect internally all URIs to /index.php RewriteRule .* /index.php [L]
However, this will not work - it'll freeze your Apache Web server. Why?
The problem is this line:
RewriteRule .* /index.php [L]
Simply put, that rule 'says' "Redirect all requests to /index.php.". That may sound like what we originally set out to achieve, but, in practice, we will not get the results we expect.
The URI is /path/to/ RewriteRule will rewrite the URI from path/to/ to /index.php An internal redirection will be made for /index.php The internal redirection will be treated as a new request, so it will be parsed again (see phase b)
Phase B
The previous internal redirection, /index.php, will be processed again by the rewrite engine RewriteRule will rewrite index.php to /index.php An internal redirection will be made for /index.php
At this point the rewrite engine will run Phase B continuously and the Apache Web server will freeze.