2017-01-31 3 views
1

Ich habe ein Problem, das sich wie folgt:RewriteRule Fehler in den .htaccess

RewriteRule ^site site.php [NC,L] 
RewriteRule ^site/([0-9a-zA-Z_-]+)$ site.php?parameter=1$ [NC,L] 

Die Idee ist, zu erkennen, dass, wenn es ein Parameter in der URL. ist also das, was ich will:

www.example.com/site 
www.example.com/site/1 

Nach meiner Kenntnis, aber ich habe lediglich versucht, die Dinge nicht geklappt haben. Vielen Dank im Voraus.

Antwort

1

In Ihrem Paar Regeln wird die erste beide Beispiel URLs entsprechen. Also wird die zweite Regel nie angewendet werden. Sie haben die Reihenfolge der Regeln ändern:

RewriteEngine on 
RewriteRule ^/?site/([0-9a-zA-Z_-]+)$ site.php?parameter=$1 [NC,L] 
RewriteRule ^/?site/?$ site.php [NC,L] 

Bitte beachte, dass ich auch die nun zweite Regel leicht modifiziert es Pfade zum Beispiel wie /sitelist passend zu verhindern. Es verhindert auch eine Umleitung Schleife wegen der Übereinstimmung /site.php auch ... Die ursprüngliche /? ich auch hinzugefügt ermöglicht es, die gleichen Regeln in der http-Server-Host-Konfiguration ohne Änderung zu verwenden, nicht nur in .htaccess Stil dynamische Konfigurationsdateien.

Ein genereller Hinweis: Sie sollten solche Regeln immer lieber in der HTTP-Server-Host-Konfiguration platzieren, anstatt dynamische Konfigurationsdateien zu verwenden (".htaccess"). Diese Dateien sind notorisch fehleranfällig, schwer zu debuggen und verlangsamen den Server wirklich. Sie werden nur als letzte Option für Situationen angeboten, in denen Sie keine Kontrolle über die Host-Konfiguration haben (lesen Sie: wirklich günstige Hosting-Service-Provider) oder wenn Sie eine Anwendung haben, die eigene Schreibregeln schreibt (was ein offensichtlicher Sicherheitsalarm ist)).

+0

Gute Antwort Arkascha. +1 – starkeen

+0

Aah, ich habe es. Danke :) –

1

Diese Zeile eine beliebige URL umleitet, die mit site beginnt zu seite.php:

RewriteRule ^site site.php [NC,L] 

Diese Linie wird nie laufen, weil site bereits von der ersten Regel gefangen und umgeleitet wurde:

RewriteRule ^site/([0-9a-zA-Z_-]+)$ site.php?parameter=$1 [NC,L] 

Wenn Sie also zuerst die zweite Regel ausführen, wird das Problem gelöst, da dies den spezifischeren Fall auslöst.

+0

wofür ist ** = 1 $ **? – starkeen

+0

Ich habe das Original kopiert und eingefügt, ohne diesen Fehler zu bemerken. Fest. –