Юникод Linux / умлаутс в URL
У нас есть веб-сайт, где некоторые изображения называются с использованием Unicode, например 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 / Jun / 2016: 13: 27: 36 +0000] "GET /wp-content/uploads/2014/11/wildkr%C3%A4uter2_big.jpg HTTP / 1.0" 404 22295 "-" "curl /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=