У нас есть веб-сайт, на котором некоторые изображения называются в юникоде, например 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=