2009-08-25 6 views
0

Ich habe einige Probleme mit einer Regel mod_rewrite. Ich muss zwei Arten von Links machen (der erste ist für die Künstler, die ein Album haben, der zweite ist der für diejenigen, die das nicht tun): 1)/lyrics/artist-name/album-name/song -name.php 2) /lyrics/artist-name/song-name.phpProblem mit URL-Umschreiben für die gleiche .php-Seite

Mein Code sieht wie folgt aus:

RewriteRule ^lyrics/(.*)/(.*)/(.*).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L] 
RewriteRule ^lyrics/(.*)/(.*).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L] 

Leider nur die erste Regel funktioniert. Wie kann ich sie ändern, damit beide funktionieren?

Vielen Dank.

Antwort

0

Die zweite Regel funktioniert nie, weil die erste Regel auch "/lyrics/artist-name/song-name.php" entspricht: (. *) Bedeutet: beliebig viele Zeichen (sogar Null).

Ohne die Möglichkeit, es zu testen zu haben, kann diese Arbeit:

RewriteRule ^lyrics/([^\]+)/([^\]+).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L] 
RewriteRule ^lyrics/([^\]+)/([^\]+)/([^\]+).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L] 
+0

Ich erhalte einen 500 Server-Fehler mit diesen Regeln :( – Psyche

1

Sie benötigen Muster präziser zu machen. Versuchen Sie es mit [^/]+ (ein oder mehrere Zeichen außer /) statt .* (alle Zeichen beliebiger Länge):

RewriteRule ^lyrics/([^/]+)/([^/]+)/([^/]+)\.php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L] 
RewriteRule ^lyrics/([^/]+)/([^/]+)\.php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L] 
+0

noch nicht funktionieren Jungs Vielleicht, weil diese anderen Regel ist es ich habe:. RewriteRule^Texte /(.*)/(.*)$ /artists-albums.php?a=$1&b=$2 [QSA, L] – Psyche

+0

@Psyche: Also hast du meine vorgeschlagenen Regeln nicht getestet? – Gumbo

+0

Ich habe sie ausprobiert, aber wie gesagt, sie scheinen nicht zu funktionieren. Ich denke, es ist ein Konflikt mit der Regel, die ich oben eingefügt habe. – Psyche

0

Allgemeinen Sie Ihre Atom so restriktiv wie möglich gesetzt werden soll unbeabsichtigte Folgen zu vermeiden. Im folgenden Beispiel werden nur alphanumerische Zeichen akzeptiert (was wahrscheinlich das ist, was Sie wollen). Das Zeichen + bezeichnet eins oder mehrere, während * Null oder mehr bedeutet.

RewriteRule ^lyrics/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+).php$ /artists-lyrics.php?a=$1&b=$2&c=$3 [QSA,L] 
RewriteRule ^lyrics/([a-z0-9]+)/([a-z0-9]+).php$ /artists-lyrics.php?a=$1&b=$2 [QSA,L] 
Verwandte Themen