Es hängt von beiden Zeichenkodierungen ab (die in der .htaccess-Datei verwendeten und die für die angeforderte URI verwendet), wenn Ihre Regel funktioniert. Wenn beide gleich sind, sollte es funktionieren.
Die meisten Benutzeragenten verwenden heutzutage entweder ISO 8859-1 oder UTF-8, wenn sie die URL für eine Anforderung über HTTP codieren. Aber UTF-8 wird die ISO 8859-1 früher oder später ersetzen.
Und als bobince in den Kommentaren bemerkt, Apache verwendet intern die Einzelbyte-Codierung ASCII bei der Interpretation von .htaccess-Dateien. Sie könnten also Probleme bekommen, wenn Sie eine Mehrbyte-Codierung wie UTF-8 verwenden. Aber die folgende ist unabhänging Codierung:
# for ISO 8859-1
RewriteRule ^([a-zA-Z0-9\xC4\xD6\xDC\xDF\xE4\xE9\xF6\xFC-]*)/?$ page.php?var=$1 [L]
# for UTF-8
RewriteRule ^(([a-zA-Z0-9-]|\xC3\x84|\xC3\x96|\xC3\x9C|\xC3\x9F|\xC3\xA4|\xC3\xA9|\xC3\xB6|\xC3\xBC)*)/?$ page.php?var=$1 [L]
Aber eine solche Konstruktion zu vermeiden, könnten Sie einfach den Schrägstrich und Punkt ausschließen und den Wert bestätigen später mit PHP:
RewriteRule ^([^/.]*)/?$ page.php?var=$1 [L]
warum dann seine nur in Server geschieht. .. ich meine lokale Maschine es funktioniert .... :( – coderex
Vielleicht verwenden Sie verschiedene Codierungen, entweder für die Datei oder die URI. – Gumbo
+1, behandelt Apache mit Bytes, so dass die ursprünglichen Regeln nur funktionieren würden ISO-8859-1-Einreichungen, die selten sind, da URLs heute de facto UTF-8 sind, vermeiden das Problem auf dieser Ebene, indem sie alle zulassen alter Charakter durch; Wenn Sie im PHP-Skript eine Zeichenprüfung durchführen müssen, ist es nicht sinnvoll, eine solche Logik in der Webserverschicht als Neuschreiben zu verwenden. – bobince