Apache HTTP Server
All examples that follow use mod_rewrite, an official module that comes bundled with Apache. To use it, mod_rewrite must either be included at compile time or enabled as a Dynamic Shared Object (DSO). Please consult the » Apache documentation for your version for more information.
Rewriting inside a VirtualHost (httpd.conf/php.ini)
Here is a very basic virtual host definition. These rules direct all requests to index.php, except when a matching file is found under the document_root.
-
<VirtualHost my.domain.com:80>
-
ServerName my.domain.com
-
DocumentRoot /path/to/server/root/my.domain.com/public
-
RewriteEngine off
-
<Location />
-
RewriteEngine On
-
RewriteCond %{REQUEST_FILENAME} -s [OR]
-
RewriteCond %{REQUEST_FILENAME} -l [OR]
-
RewriteCond %{REQUEST_FILENAME} -d
-
RewriteRule ^.*$ - [NC,L]
-
RewriteRule ^.*$ /index.php [NC,L]
-
</Location>
-
</VirtualHost>
Note the slash ("/") prefixing index.php; the rules for .htaccess differ in this regard.
Rewriting within a .htaccess file
Below is a sample .htaccess file that utilizes mod_rewrite. It is similar to the virtual host configuration, except that it specifies only the rewrite rules, and the leading slash is omitted from index.php.
-
RewriteEngine On
-
RewriteCond %{REQUEST_FILENAME} -s [OR]
-
RewriteCond %{REQUEST_FILENAME} -l [OR]
-
RewriteCond %{REQUEST_FILENAME} -d
-
RewriteRule ^.*$ - [NC,L]
-
RewriteRule ^.*$ index.php [NC,L]
There are many ways to configure mod_rewrite; if you would like more information, see Jayson Minard's » Blueprint for PHP Applications: Bootstrapping.
Microsoft Internet Information Server (IIS 配置) web.config
As of version 7.0, IIS now ships with a standard rewrite engine. You may use the following configuration to create the appropriate rewrite rules.
-
<?xml version="1.0" encoding="UTF-8"?>
-
<configuration>
-
<system.webServer>
-
<rewrite>
-
<rules>
-
<rule name="Imported Rule 1" stopProcessing="true">
-
<match url="^.*$" />
-
<conditions logicalGrouping="MatchAny">
-
<add input="{REQUEST_FILENAME}"
-
matchType="IsFile" pattern=""
-
ignoreCase="false" />
-
<add input="{REQUEST_FILENAME}"
-
matchType="IsDirectory"
-
pattern=""
-
ignoreCase="false" />
-
</conditions>
-
<action type="None" />
-
</rule>
-
<rule name="Imported Rule 2" stopProcessing="true">
-
<match url="^.*$" />
-
<action type="Rewrite" url="index.php" />
-
</rule>
-
</rules>
-
</rewrite>
-
</system.webServer>
-
</configuration>