TigerZF
🌐Español

E.4. Guía de configuración de Rewrite

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.

E.4.1. Servidor HTTP Apache

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.

E.4.1.1. Reescritura dentro de un VirtualHost

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.

E.4.1.2. Reescritura dentro de un archivo .htaccess

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.

E.4.2. Microsoft Internet Information Server

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>