проблема кодировки символов htaccess - PullRequest
1 голос
/ 22 августа 2009

У меня есть страница, которая перенаправлена ​​из htaccess. теперь я могу передавать немецкие символы как параметры

как

site.com / maörx / idasd

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^([a-zA-Z0-9äÄöÖüÜéß\-]*)/?$ page.php?var=$1 [L]

это работает на локальном хосте. но не на сервере .... сервер Я получаю ту же старую проблему ( Ошибка 404: объект не найден!) является ли приведенный выше код правильным для сервера ??

Ответы [ 2 ]

3 голосов
/ 22 августа 2009

Это зависит от того, работает ли ваше правило как для кодировки символов (используемой в файле .htaccess, так и для запрошенного URI). Если оба одинаковы, это должно работать.

Большинство пользовательских агентов в настоящее время используют ISO 8859-1 или UTF-8 при кодировании URL для запроса по HTTP. Но UTF-8 рано или поздно заменит ISO 8859-1.

И как bobince заметил в комментариях, Apache внутренне использует однобайтовую кодировку ASCII при интерпретации файлов .htaccess. Таким образом, у вас могут возникнуть проблемы при использовании многобайтовой кодировки, такой как UTF-8. Но следующее кодирование не зависит:

# 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]
0 голосов
/ 22 августа 2009

Если в этих этих умлаутах нет ничего особенного, вы должны использовать в своем регулярном выражении классы символов POSIX, такие как [: alpha:], [: alphanum:], [: upper:] и [ : ниже:.]

См., Например, Классы символов POSIX в статье Википедии о регулярных выражениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...