La reescritura de URL es una función común de los servidores HTTP. Sin embargo, las reglas y la configuración difieren ampliamente entre ellos. A continuación se muestran algunos enfoques comunes en una variedad de servidores web populares disponibles en el momento de escribir esto.
Todos los ejemplos siguientes usan mod_rewrite, un módulo oficial que viene incluido con Apache. Para usarlo, mod_rewrite debe estar incluido en tiempo de compilación o habilitado como un objeto compartido dinámico (DSO). Consulte la documentación de Apache para su versión para más información.
Aquí se muestra una definición de host virtual muy básica. Estas reglas dirigen todas
las peticiones a index.php, excepto cuando se encuentra un
archivo coincidente bajo el 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>
Observe la barra ("/") que precede a index.php; las reglas para
.htaccess difieren en este aspecto.
A continuación se muestra un archivo .htaccess de ejemplo que
utiliza mod_rewrite. Es similar a la configuración del host
virtual, excepto que especifica únicamente las reglas de reescritura, y se omite la
barra inicial de 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]
Hay muchas formas de configurar mod_rewrite; si desea más información, consulte el artículo de Jayson Minard Blueprint for PHP Applications: Bootstrapping.
A partir de la versión 7.0, IIS ahora incluye un motor de reescritura estándar. Puede usar la siguiente configuración para crear las reglas de reescritura apropiadas.
<?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>