2009-03-21 4 views
0

Meine .htaccess-Datei sieht derzeit wie dieseWas ist los mit meiner RewriteRule?

AddType x-mapp-php5 .php 
Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 
RewriteBase/
RewriteRule ^account$ /account/orders.php [L] 

Als ich nach http://mywebsite.com/account gehen, um es richtig, die Seite an http://mywebsite.com/account/orders.php zeigt. Aber wenn ich die RewriteRule zu

RewriteRule ^account/orders$ /account/orders.php [L] 

ändern und dann gehe ich zu http://mywebsite.com/account/orders, ich Error 404 Seite bekommen nicht gefunden. Was habe ich falsch gemacht?

****** Weitere Details **

ich diagnostiziert schließlich das Problem. Aber ich verstehe nicht, warum meine Lösung funktioniert. Betrachten Sie das Szenario, in dem account/orders.php existiert.

wird die folgende Regel nicht funktioniert

RewriteRule ^account/orders$ account/orders.php [L] 

Die folgende Regel

RewriteRule ^account/order$ account/orders.php [L] 

Ie funktionieren., Wird die Rewrite-Regel fehl, wenn das Muster in eine vorhandene Datei auswertet. Wenn also das Muster mit der Substitution identisch ist, aber ohne die Erweiterung, schlägt die Rewrite-Regel fehl. Wenn ich eine Datei namens account/order.php hinzufüge, werden beide Regeln fehlschlagen.

Warum passiert das?

Antwort

0

Haben Sie versucht, einen relativen Pfad?

RewriteRule ^account/orders$ account/orders.php [L] 

bearbeiten Sie sollten auch sicherstellen, dass behinderte MultiViews haben. Dies führt dazu, dass Apache einige zusätzliche ungenaue Dateiabgleiche durchführt, um ähnlich benannte Dateien zu finden, und /account/orders würde daher /account/orders.php zugeordnet werden, bevor es an mod_rewrite übergeben wird.

+0

Ich habe Verwandte Pfade und absolute Pfade für beide Begriffe des rewriterule versucht. Immer noch das gleiche Problem – John

0

Seltsam, scheint es ok für mich ... Wenn Sie Zugriff auf Apache-Konfiguration versuchen RewriteLog und RewriteLogLevel für einige Debug zu ermöglichen ...

Schauen Sie auch in die Log-Dateien der Site (immer wenn Sie haben Zugriff)

+0

Leider habe ich keinen Zugriff auf Apache-Konfiguration. Mein Shared-Hosting-Provider sagt, dass ich keinen Zugriff auf Apache-Server-Logs habe. Gibt es andere Arten von Protokollen, die ich überprüfen kann? – John

+0

mmm Ich bin mir nicht sicher, aber vielleicht können Sie ein PHP-Skript als Standard-404-Seite erzwingen und eine print_r ($ _ SERVER); im Inneren. In diesem Modus können Sie sehen, was genau aufgerufen wurde und warum Apache es nicht findet. – Alekc

1

Ich sehe nicht, wie Ihr erstes Beispiel funktionieren würde, weil ich glaube, dass die ersten Schrägstriche auch weitergegeben werden.

RewriteRule ^/Konto/Bestellungen $ /account/orders.php [L]

0

Ich würde zuerst versuchen, eine Umleitung zu meinen Regeln hinzuzufügen, damit ich im Browser sehen kann, was auf dem Server passiert.

RewriteRule ^account$ /account/orders.php [L,R] 

auch sicher, dass es keine andere Regeln (frühere) zu stören, nur für den Fall, dass Sie hier nicht alle Ihrer .htaccess-Datei zeigen.

+0

yup, das ist meine gesamte .htaccess-Datei, keine anderen Regeln darauf – John

+0

RewriteRule^Konto $ /account/orders.php [L, R] ordnungsgemäß umgeleitet, aber die RewriteRule^Konto/Aufträge $ Konto/Aufträge. php [L, R] leitet auf eine nicht gefundene 404-Seite um – John

0

Ich beantworte meine eigene Frage, weil ich schließlich das Problem diagnostizierte. Aber ich verstehe nicht, warum meine Lösung funktioniert. Betrachten Sie das Szenario, in dem account/orders.php existiert.

wird die folgende Regel nicht funktioniert

RewriteRule ^account/orders$ account/orders.php [L] 

Die folgende Regel

RewriteRule ^account/order$ account/orders.php [L] 

Ie funktionieren., Wird die Rewrite-Regel fehl, wenn das Muster in eine vorhandene Datei auswertet. Wenn also das Muster mit der Substitution identisch ist, aber ohne die Erweiterung, schlägt die Rewrite-Regel fehl. Wenn ich eine Datei namens account/order.php hinzufüge, werden beide Regeln fehlschlagen.

Warum passiert das?