Leitfaden für die Rewrite Konfiguration

URL Rewriting ist eine der üblichen Funktionen von HTTP Servern. Trotzdem unterscheiden sich die Regeln und die Konfiguration zwischen ihnen sehr stark. Anbei sind einige der üblichen Vorschläge für eine Vielzahl der populären Webserver zu finden, die zur der Zeit in der das hier geschrieben wurde, vorhanden sind.

Apache HTTP Server

Alle folgenden Beispiel verwenden mod_rewrite, ein offizielles Modul, das zusammen mit Apache kommt. Um es zu verwenden, muss mod_rewrite entweder wärend der Zeit des Kompilierens enthalten sein, oder als Dynamic Shared Objekt (DSO) aktiviert werden. Konsultieren Sie bitte die Apache Dokumentation für weitere Informationen über Ihre Version.

Rewriting innerhalb eines VirtualHost

Hier ist eine sehr grundsätzliche Definition eines virtuellen Hosts. Diese Regeln leiten alle Anfragen auf index.php weiter, ausser wenn eine passende Datei im document_root gefunden wurde.

<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>

Es ist der Schrägstrich ("/") zu beachten der index.php vorangestellt ist; die Regeln für .htaccess unterscheiden sich in diesem Punkt.

Rewriting innerhalb einer .htaccess Datei

Anbei ist eine einfache .htaccess Datei welche mod_rewrite verwendet. Das ist ähnlich der Konfiguration für virtuelle Hosts, ausser dass sie nur die Rewrite Regeln spezifiziert, und der führende Schrägstrich bei index.php nicht angegeben wird.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Es gibt viele Wege um mod_rewrite zu konfigurieren; wenn man weitere Informationen haben will, dann sollte man in Jayson Minards Blueprint for PHP Applications: Bootstrapping sehen.

Microsoft Internet Information Server

Ab Version 7.0 wird IIS jetzt mit einer standardmäßigen Rewrite Engine ausgeliefert. Man kann die folgende Konfiguration verwenden, um die entsprechenden Rewrite Regeln zu erstellen.

<?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>