Apache, кодирующий ascii в utf8 - PullRequest
       17

Apache, кодирующий ascii в utf8

0 голосов
/ 27 ноября 2011

На моем сервере есть статические подпапки.Все, что я хочу, это Apache, чтобы направить их в правильном направлении.С обычными английскими подпапками у меня проблем нет.example.com/asd -> / srv / fdr / asd.Когда запрос содержит не-ascii буквы, он конвертирует их следующим образом: Büc -> B% C3% BCc, в то время как моя папка называется / srv / fdr / Büc (в utf8), Apache направляет его в / srv / fdr / B%C3% BCc.

Есть идеи, как изменить URL-адрес запрошенной кодировки?

Спасибо

1 Ответ

2 голосов
/ 28 ноября 2011

Вы можете использовать RewriteMap и int (внутренние функции), чтобы создать карту unescape (хотя она называется "escape"). Поскольку это RewriteMap, он должен быть либо в конфигурации сервера (httpd.conf), либо в конфигурации виртуального хоста:

RewriteMap unescape int:escape

Теперь вы можете использовать $ {unescape:} для вашей обратной ссылки. Поэтому, если вы соответствуете URI, в котором есть экранированные символы, вы можете заключить в него свою обратную ссылку, чтобы выйти из нее. Например:

# Need this to avoid rewrite-looping
RewriteCond %{REQUEST_URI} !^/srv/fdr
RewriteRule ^(.+)$ /srv/fdr/${unescape:$1} [L,NE]

Это займет URI /B%C3%BCc и перепишет его на /srv/fdr/Büc

Также обратите внимание, что если вы поместите правило перезаписи в конфигурацию вашего сервера или виртуального хоста, вам нужно добавить / перед (. +) в совпадении с регулярным выражением.

...