it-swarm.com.de

Frage zur mod_rewrite-Regel zum Umleiten fehlerhafter Seiten

Ich richte eine mod_rewrite -Regel ein, die fehlgeschlagene Seiten auf eine benutzerdefinierte Seite "Seite nicht gefunden" umleitet. Dies ist mit WordPress. Ich habe ein Online-Tutorial von der Apache-Site verwendet und bisher sehen meine Regeln so aus:

RewriteCond   %{REQUEST_FILENAME} !-f
RewriteRule   ^(.+)   http://example.com/?page_id=254 [R]

Das funktioniert. Es scheint eine Kombination aus erstem und zweitem Vorschlag zu sein, die funktioniert hat, da das Flag -U nichts bewirkt hat.

Meine Frage ist, aus Neugier, warum Folgendes passiert: Wenn ich REQUEST_FILENAME in REQUEST_URI ändere (wie im zweiten Beispiel vorgeschlagen), wird die Seite geladen, aber keines der Stylesheets wird geladen. Alle meine Formatierungen sind weg, und das passiert auf jeder Seite. Kann sich jemand vorstellen, warum das passieren könnte?

3
Chris Laplante

Zum Festlegen von benutzerdefinierten 404-Werten sollten Sie in der Lage sein, dies viel einfacher zu tun (auch in .htaccess):

ErrorDocument 404 http://example.com/?page_id=254

Siehe auch: ErrorDocument

Weniger chaotisch und deutlich weniger CPU-Auslastung pro Anforderung als mod_rewrite - alles, was 404s gerade tut, ohne dass Fragen gestellt werden. Ich würde auf jeden Fall in Betracht ziehen, aus einem Fehler eine statische Seite zu machen, wenn dies möglich ist, insbesondere wenn Sie sie dehnen, um andere Fehler zu behandeln (kein Spaß, wenn Ihr 500er-Fehler einen 500er-Fehler auslöst).

4
tadamson
RewriteCond   %{REQUEST_FILENAME} !-f

Meine Frage ist, aus Neugier, warum Folgendes passiert: Wenn ich REQUEST_FILENAME in REQUEST_URI ändere (wie im zweiten Beispiel vorgeschlagen), wird die Seite geladen, aber keines der Stylesheets wird geladen. Alle meine Formatierungen sind weg, und das passiert auf jeder Seite.

REQUEST_FILENAME und REQUEST_URI enthalten unterschiedliche Werte in verzeichnisbezogenen Htaccess-Dateien. REQUEST_FILENAME ist der vollständige Pfad des lokalen Dateisystems zur Datei, während REQUEST_URI die Pfadkomponente der angeforderten URI ist (die nicht unbedingt eine tatsächliche Datei im Dateisystem ist).

-f testet, ob der TestString eine reguläre Datei ist, was beim REQUEST_URI häufig nicht der Fall ist. Dies ist wahrscheinlich der Grund, warum Anforderungen für Ihre Stylesheets umgeleitet werden.

Es scheint jedoch, dass der REQUEST_URI für Ihre Hauptseite als reguläre Datei angesehen wird (oder andere Direktiven zuerst zur Anfrage gelangen). Dies hängt von Ihrer URL-Struktur und möglicherweise anderen Anweisungen in Ihrer .htaccess-Datei ab.

0
MrWhite

Sehr eigenartig. In FF können Sie Firebug oder Tamper Data zum Debuggen verwenden. Siehe auch Quellcode (Strg + U) und klicken Sie auf den darin enthaltenen Stylesheet-Link. Siehe auch Fehlerkonsole (Strg + Umschalt + j).

0
alvosu

Wenn Sie über WordPress sprechen, werden möglicherweise bereits Umleitungen verwendet, sodass REQUEST_URI nicht auf das eingestellt wird, was Sie erwarten - und daher fehlschlägt. Wenn beispielsweise auf ?page_id=100 zugegriffen wird, kann der Anforderungs-URI tatsächlich eine leere Zeichenfolge sein. Auch wenn es index.php im Hintergrund verwendet, wird es zum Zeitpunkt Ihrer Bedingung wahrscheinlich nicht festgelegt.

Sie können Mod_rewrite-Debugging aktivieren, um die verschiedenen Schritte zu sehen, die der Mustervergleich ausführt, und ich rate Ihnen dringend, dies zu tun, wenn Sie herausfinden möchten, was los ist. :)

0
Redmumba