Это зависит от обоих кодировок символов (тот, который используется в файле .htaccess и тот, который используется для запрошенного URI), если ваше правило работает. Если оба они одинаковы, они должны работать.
Большинство пользовательских агентов в настоящее время используют либо ISO 8859-1, либо UTF-8 при кодировании URL-адреса для запроса по HTTP. Но UTF-8 рано или поздно заменит ISO 8859-1.
И как bobince заметил в комментариях, Apache использует внутреннюю однобайтную кодировку ASCII при интерпретации файлов .htaccess. Таким образом, у вас могут возникнуть проблемы при использовании многобайтовой кодировки, такой как UTF-8. Но это кодировка independed следующее:
# 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]
Но чтобы избежать такой конструкции, можно просто исключить слэш и точку и проверить значение позже с PHP:
RewriteRule ^([^/.]*)/?$ page.php?var=$1 [L]
, то почему его происходит только в сервере. .. i моя локальная машина работает .... :( – coderex
Возможно, вы используете разные кодировки, как для файла, так и для URI. – Gumbo
+1, Apache имеет дело с байтами, поэтому исходные правила будут работать только для Представления ISO-8859-1, которые являются редкими, поскольку URL-адреса сегодня являются де-факто UTF-8. Лучше избегать проблемы на этом уровне, разрешив любые старый символ; выполните любые проверки символов, которые вам понадобятся в PHP-скрипте, не имеет смысла вставлять такую логику на уровне веб-сервера, как переписывать. – bobince