2010-12-09 7 views
4

Also habe ich gerade eine Website geerbt. Das erste, was ich tun möchte, ist ein nettes, kleines Standard-CMS, das es erlaubt, eine Seite mit einer beliebigen URL zu erstellen (zum Beispiel: was auch immer.html).Verwenden von. Htaccess, um alle Anfragen durch index.php umzuleiten, mit Ausnahme bestimmter Anforderungen

Daher, wenn Benutzer example.com/whateverht.html, sollte es alle DB-Informationen für was auch immer.html abrufen und anzeigen. Das ist der Mühlenkram.

Mein Problem ist, dass es ziemlich viele Seiten auf der Website gibt (alle in der. Htaccess aufgeführt), die weiterhin zugänglich sein müssen. Zum Beispiel ist/Promotions über .htaccess mit promotions.php verknüpft, und ich brauche es, um so zu bleiben.

Wer weiß, wie ich die .htaccess-Datei konstruieren kann, damit bestimmte Umschreibungen noch funktionieren, aber alle anderen Anfragen über index.php umgeleitet werden?

Momentan habe ich einfach .htaccess eine benutzerdefinierte 404-Seite anzeigen, die wiederum überprüft die db für die URL und zeigt es an, wenn es existiert. Dies ist eine einfache Lösung, aber ich weiß, dass einige Leute seltsame Browser-Symbolleisten haben (dumm oder nicht, sie existieren :)), die autoredirect 404s, und ich würde es hassen, meine Benutzer mit diesen Symbolleisten zu verärgern, indem ich den Zugriff auf bestimmte Seiten nicht erlaube.

Vielen Dank für Ihre Hilfe!

Antwort

5

Die RewriteRule für Promotions sollte immer noch funktionieren, da es nicht 404 ist.

Wenn der 404-Handler die Seite anzeigt, weil sie in der Datenbank vorhanden ist, sollte sie wirklich einen 200 OK-Status zurückgeben (den 404-Wert überschreiben), sodass Sie keine Probleme mit Browser-Symbolleisten bekommen sollten.

Was tut die Umleitung Sie etwas tun können:

RewriteEngine On 
RewriteCond %{REQUEST_URI} !^.*/(promotions|anotherone|somethingelse)($|/.*$) [NC] 
RewriteRule ^(.*)$ /index.php?p=$1 
+0

Awesome, thanks! – Dylan

+0

Also, in der Theorie, die 404-Handler behandeln die Anforderungen, die noch nicht RewriteRules sind, sollte funktionieren? Nochmals vielen Dank für Ihre Hilfe. :) – Dylan

+0

Das ist korrekt, die Verwendung eines 404-Handlers ist irgendwie der "klassische" Weg, dies zu tun (bevor mod_rewrite und andere Rewrite-Engines weit verbreitet waren). Denken Sie daran, den Status auf 200 OK zurückzusetzen, wenn die Seite tatsächlich existiert. Andernfalls werden Sie feststellen, dass die Seiten von den Suchmaschinen abstürzen (oder gar nicht erst indexiert werden). – Ben

3

Hier ist eine weitere Variante:

RewriteEngine on 
RewriteRule ^/i/(.*)$ - [L] 
RewriteRule ^/css/(.*)$ - [L] 
RewriteRule ^index.php$ - [L] 
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA] 
Verwandte Themen