fragen stichworte

Verwendung von Unicode in rewriterule

Ich habe die folgenden Anweisungen in der Datei .htaccess verwendet, die utf8-Zeichen in RewriteRule enthält. Die .htaccess -Datei wird mit der utf8-Kodierung in Notepad gespeichert. Alle Seiten der Site werden in utf8 gespeichert und der Zeichensatz von allen ist utf8.

<IfModule mod_rewrite.c>
RewriteEngine On 
RewriteBase/new/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$/linux-regular.php [L]
</IfModule>

Wenn ich jedoch zur URL هاستینگ/هاست-لینوکس-عادی/ browse, wird der Fehler "Nicht gefunden" angezeigt.

antworten

RewriteBase/new/:
RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$/linux-regular.php [L]

Die Tatsache, dass Sie einen bestimmten Wert für RewriteBase festgelegt haben, jedoch einen root-relativen URL-Pfad in der RewriteRule -Ersetzung angegeben haben, löst Alarmsignale aus. Die RewriteBase -Direktive wirkt sich nur auf relative (nicht mit einem Schrägstrich oder Schema) aus. Ersetzungen. In diesem Fall wird sie einfach ignoriert - was ich sicher bin ist nicht die Absicht - sonst müsste es gar nicht erst gesetzt werden.

Durch das Entfernen des Schrägstrich-Präfixes bei der RewriteRule -Erwiedung wird das RewriteBase berücksichtigt und mit /new/linux-regular.php überschrieben. Zum Beispiel:

RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ linux-regular.php [L]

Was mit Ihrem späteren Kommentar übereinstimmt: "... und entfernte/vom Start von linux-regular.php und es hat funktioniert."

...the special characters will be encoded in %xx hex form

Nebenbei: Während die Anforderung% -codiert (URL-codiert) sein soll, ist der URL-Pfad, dem das RewriteRule -Muster entspricht,% -decoded (URL) decodiert) durch die Umschreib-Engine. Die Verwendung der tatsächlichen (UTF-8) -Zeichen im RewriteRule -Muster ist hier also korrekt (im Gegensatz zur anderen Antwort).

Wenn Sie speziell gegen den% -encodierten URL-Pfad ausrichten müssen, müssen Sie eine RewriteCond -Anweisung verwenden und die Servervariable THE_REQUEST prüfen.

URLs werden "in der Leitung" in normalem ASCII-Code (latin1) codiert. Alle nicht-ASCII-Zeichen werden von Clients (Browsern) im Hex-Format %xx ...

codiert

Sie können den folgenden Artikel hilfreich finden.

Um genauer zu sein: Ihre Apache-Konfigurationsdatei wird aus reinem ASCII-Text und die Sonderzeichen werden in der %xx -Hexe-Form codiert. Sie können sie sogar mit einem einfachen Tool übersetzen, das auf der oben genannten w3schools-Seite verfügbar ist.