2010-12-16 19 views
0
RewriteEngine On 
RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2 
RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2 


.htaccess RewriteRule funktioniert nicht richtig

ich .htaccess bin mit url neu zu schreiben (oben ist der Code, ich verwende)

das Problem ist, die zweite Zeile (RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2) nicht richtig funktioniert. dh


die zweite Zeile wird ordnungsgemäß funktionieren, wenn ich die erste Zeile (RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2) Kommentar

Der folgende Code funktioniert

RewriteEngine On 
    #RewriteRule books/(.*)/(.*) php/booksByLanguage.php?lid=$2 
    RewriteRule list_books/(.*)/(.*) php/listBooks.php?cat_id=$2 


ich beide Regel wollen für mich arbeiten.

Antwort

2

Versuchen Sie, Anfangs- und Endmarkierungen^$ hinzuzufügen.

RewriteRule ^/Bücher/(. )/(.) $ php/booksByLanguage.php? Lid = $ 2

Auf diese Weise Ihre erste Regel wird nicht für list_books Matches ausgelöst werden.

+0

+1 erkannt das Problem richtig, -1 Lösung wird wahrscheinlich nicht funktionieren wegen der Struktur der Baustelle, +1 für effoert. Summe: +1 –

+0

:) Ich schätze die Klärung Ihrer drei Klicks. Ich vermute jedoch, dass dies für diesen speziellen Fall praveenmon über den Buckel bekommen wird. –

+0

Danke Leute, Captain Ihre Antwort hat für mich funktioniert. @joe ich verstehe nicht, was du gesagt hast, ich bin neu hier. Auf jeden Fall habe ich diese Antwort als akzeptiert markiert und "diese Antwort ist nützlich" zu 2. – praveenmon

2

Problem ist: Sie haben die Zeile beginnend mit^nicht definiert. also wird die erste Regel immer übereinstimmen, wenn die zweite auch übereinstimmt. , weil es nur der Zeichenfolge entsprechen muss. Beispiel:

books.* wird als mybookshelf ^books.* nur booksshelf auch passen bookshelf

RewriteEngine On 
RewriteRule list_books/(.+)/(.+)$ php/listBooks.php?cat_id=$2 [L] 
RewriteRule books/(.+)/(.+)$ php/booksByLanguage.php?lid=$2 

dies funktionieren sollte passen, aber nicht schön. Sache ist, dass, wenn die erste Regel (im aktualisierten Code) übereinstimmt, die zweite wird auch. aber nicht umgekehrt.

also stelle ich es auf und setze den letzten Schalter [L], so dass keine andere Regel danach ausgeführt wird.

Dies ist jedoch der falsche Weg!

Sie sollten Ihre Rewrite-Regeln so definieren, dass sie nur dem entsprechen, was Sie wollen!

ich weiß nicht, über Ihre Struktur, so könnte dies nicht funktionieren, aber ich kann in etwa wie folgt vorstellen:

RewriteEngine On 
RewriteRule ^/list_books/(.+)/(.+)$ php/listBooks.php?cat_id=$2 
RewriteRule ^/books/(.+)/(.+)$ php/booksByLanguage.php?lid=$2 

wenn dies Ihre Root-Ebene ist müssen Sie den Anfang sind Schrägstrich, wie sein Teil der Anfrage, aber ich kann Ihnen das nicht sagen, ohne Ihre Struktur zu kennen.

+0

Joe Ihre Antwort ist auch richtig. Vielen Dank. Ur detaillierte Antwort ist einfach großartig. noch eine Frage, wie ich diese Frage schließen kann. Ich kann hier keinen Knopf schließen. – praveenmon

+0

Ihre Frage ist "geschlossen", indem Sie eine Antwort akzeptieren. Das Schließen von Fragen funktioniert nur mit mehreren Stimmen von Mitgliedern mit genügend Reputation und ist nur für schlechte oder unpassende Fragen gedacht. –

Verwandte Themen