Назад | Перейти на главную страницу

Linux unicode / umlauts в URL

У нас есть веб-сайт, на котором некоторые изображения называются в юникоде, например wildkräuter2_big.jpg.

Проблема в том, что когда кто-нибудь пытается получить к нему доступ, Apache 2.4 возвращает ошибку 404:

$ curl -r 0-99 http://domain.tld/wp-content/uploads/2014/11/wildkräuter2_big.jpg

в журнале Apache:

40...168 - - [30 / июн / 2016: 13: 27: 36 +0000] "GET /wp-content/uploads/2014/11/wildkr%C3%A4uter2_big.jpg HTTP / 1.0" 404 22295 "-" "локон / 7.35.0" `

%C3%A4 вот - это ä, так как Deutsch - Unicode Tabelle говорит.

Если выполнить GET с участием %C3%A4 - он не будет работать. Если выполнить GET с a%CC%88 - Это воля работай:

$ curl -r 0-99 http://domain.tld/wp-content/uploads/2014/11/wildkra%CC%88uter2_big.jpg ����▒ExifII��Duckyd���http://ns.adobe.com/xap/1.0/<?xpacket begin="

Я не уверен - откуда у меня a%CC%88 код - но работает.

Итак, два «одинаковых» URL:

http: //domain.tld/wp-content/uploads/2014/11/wildkra%CC%88uter2_big.jpg - это работает

http: //domain.tld/wp-content/uploads/2014/11/wildkr%C3%A4uter2_big.jpg - это не работает.

Обе a%CC%88 и %C3%A4 означает то же самое - ä письмо.

Этот сайт был перенесен из другого агентства, и у нас нет информации о его настройке.

Наш текущий сервер работает под Ubuntu 14.04, с LANG=de (apache2 был перезапущен после LANG был изменен, но не весь Linux-сервер) как locale и ext4 файловая система:

# su -s /bin/bash www-data

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=de
LANGUAGE=
LC_CTYPE="de"
LC_NUMERIC=uk_UA.UTF-8
LC_TIME=uk_UA.UTF-8
LC_COLLATE="de"
LC_MONETARY=uk_UA.UTF-8
LC_MESSAGES="de"
LC_PAPER=uk_UA.UTF-8
LC_NAME=uk_UA.UTF-8
LC_ADDRESS=uk_UA.UTF-8
LC_TELEPHONE=uk_UA.UTF-8
LC_MEASUREMENT=uk_UA.UTF-8
LC_IDENTIFICATION=uk_UA.UTF-8
LC_ALL=