Reputation: 899
I need a little help figuring out what the following URL rewrite rule means. I can understant the first three lines, but I got stuck with the index.php/$1
part. What does exactly the /
means in this rule? The only thing I would always expect to see after a file name would be a query-string separator (?
). This is the first time I am seeing the /
as a separator. What does it exactly mean?
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [PT,L]
</IfModule>
Upvotes: 2
Views: 2962
Reputation:
The <IfModule mod_rewrite.c>...</IfModule>
block ensures that everything contained within that block is taken only into account if the mod_rewrite
module is loaded. Otherwise you will either face a server error or all requests for URL rewriting will be ignored.
The following two lines are conditions for the RewriteRule
line which follows them. It means that the RewriteRule
will be evaluated only if these two conditions are met.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
These lines simply state that rewriting (RewriteRule
line) will occur only if there are no existing files or folders on the server which match the URI. If they do exist then they will be served instead, unless there is some other directive that prevents it, otherwise rewriting will occur.
The last line will do the actual rewriting. It will take whatever is following the website domain name and append it to a rewritten request which will begin with index.php/
.
Here is an example.
Lets say you make a request for example.com/example-page.html
.
If there is no existing file or folder in the virtual hosts root folder named example-page.html
the rewrite rule at the end will rewrite the request to look like example.com/index.php/example-page.html
.
The main reason why applications rewrite requests like this is to ensure that they have a single point of entry, often called a bootstrap, which is considered to be a good practice from the security standpoint and also offers more granular control of requests.
Here is in my opinion a very good beginner friendly tutorial for mod_rewrite
.
Upvotes: 8
Reputation: 6632
It's just rewritting the url name.
For example, this url:
http://www.example.com/something/else
Will be the same as:
http://www.example.com/index.php/something/else
Upvotes: 2