it-swarm.com.de

.htaccess mit Unicode und normalem Englisch

Ich habe den folgenden .htaccess Code:

RewriteRule ^Indian-Patriot-Name/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+).*?$ indianpatriot.php?id=$1&lid=$2&name=$3  [B,L,QSA]

Womit ich das Ergebnis des folgenden Links sehen kann:

example.com/Indian-Patriot-Name/104/8/ச்வடன்ற்யவீர்%20சவர்க்கார்%20రాష్ట్రీయ%20சமரக்

Wenn ich jedoch die folgende URL anzeigen möchte (nicht Unicode):

example.com/Indian-Patriot-Name/104/8/abcd

Ich kann die Ausgabe nicht anzeigen, da der Fehler "Datei nicht gefunden" angezeigt wird! Wenn ich jedoch die Direktive/Regex wie folgt ändere, kann ich die obige (Nicht-Unicode-) URL richtig lesen.

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3  [L]

F. Wie kann ich ([A-Za-z0-9-]+) und ([^\x00-\x7F]+) in derselben Rewrite-Anweisung kombinieren?

Ich habe es versucht:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+)+([A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3  [B,L,QSA]

ich erhalte jedoch erneut den Fehler "Datei nicht gefunden".


PDATE: Ich habe Folgendes versucht:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+ [A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3  [B,L,QSA]

Ich erhalte jedoch einen internen Serverfehler:

Interner Serverfehler Der Server hat einen internen Fehler oder eine falsche Konfiguration festgestellt und konnte Ihre Anforderung nicht ausführen.

Wenden Sie sich an den Serveradministrator unter [email protected], um ihn über den Zeitpunkt des Fehlers und die Aktionen zu informieren, die Sie unmittelbar vor diesem Fehler ausgeführt haben.

Weitere Informationen zu diesem Fehler finden Sie möglicherweise im Serverfehlerprotokoll.

Bei dem Versuch, ein ErrorDocument zu verwenden, um die Anforderung zu verarbeiten, trat ein 500 Internal Server Error Fehler auf.

3
user1526780
RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+ [A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA]

Ich erhalte einen internen Serverfehler ...

Sie haben ein falsches Leerzeichen im RewriteRuleMuster. Dies führt zu Ihrem "Internal Server Error", da Leerzeichen in Apache-Direktiven Trennzeichen sind. Wenn Sie Ihr Fehlerprotokoll überprüfen, wird wahrscheinlich ein Fehler in Bezug auf "Ungültige Flags" angezeigt, da indianpatriot.php?id... jetzt als Flags Argument für die RewriteRule -Direktive angesehen wird.

Allerdings sieht der Vorschlag von @PatrickMevzek in Kommentaren, alternation zu verwenden, so aus, als hätte es funktionieren sollen. Zum Beispiel:

RewriteRule ^Indian-Patriot-Name-English/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([^\x00-\x7F]+|[A-Za-z0-9-]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA]

Beachten Sie, dass Ihr ursprünglicher regulärer Ausdruck, der mit der Unicode-URL übereinstimmt, am Ende ein zusätzliches "catch everything else" -Muster aufweist: .*?. (Ihr regulärer Ausdruck, der mit der Nicht-Unicode-URL übereinstimmt, hat dies nicht.) Dies scheint ungewöhnlich. Wenn dies erforderlich ist, können Sie einfach den $ (Ende des Stringankers) am Ende des Musters weglassen, um dasselbe zu tun.

Beachten Sie auch, dass [^\x00-\x7F] eine negierte Zeichenklasse ist, die mit jedem Zeichen nicht ​​im Byte-Bereich 00..7F übereinstimmt. (verhexen). Um das lateinische Alphabet, das in diesen Bereich fällt, einzubeziehen, können Sie diesen Bereich einfach erweitern: [\x00-\xFF] - Dies ist jetzt ein positiver Bereich, der zu allem passt (was zweifellos mehr ist, als Sie benötigen, aber Sie waren) wahrscheinlich mehr zusammenbringen, als Sie mit dem ursprünglichen regulären Ausdruck brauchten).

Dies könnte jedoch möglicherweise vereinfacht werden. Wenn Sie einfach irgendetwas (Unicode oder lateinische Zeichen) am Ende der URL suchen möchten, könnte ([^\x00-\x7F]+|[A-Za-z0-9-]+) (oder sogar ([\x00-\xFF]+)) zu ([^/]+) vereinfacht werden. (dh alles außer einem Schrägstrich). Unter der Voraussetzung, dass es Ihnen auch nichts ausmacht, den Unterstrich abzugleichen, könnte [A-Za-z0-9-] auf [\w-] reduziert werden. Das wird also:

RewriteRule ^Indian-Patriot-Name-English/(\w-]+)/([\w-]+)/([^/]+)?$ indianpatriot.php?id=$1&lid=$2&name=$3 [B,L,QSA]
1
MrWhite