Специальные символы в именах файлов + nginx + php = 404
Недавно я переехал на новый сервер после того, как старый умер. У меня там была установка WordPress, работающая на Apache2 и Gentoo Linux. При переезде я решил использовать nginx и Debian. Я вернул свой WordPress на работу, и все было бы хорошо, если бы не один маленький...
проблема
Изображения, которые содержат специальные символы в именах файлов, не загружаются, я получаю 404 Not Found. Например, при запросе
http://my_site/wp-content/uploads/2013/05/Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
WordPress отвечает
You tried going to http://my_site/wp-content/uploads/2013/05/Zaj%C4%99cia-dla-doros%C5%82ych-z-bollywood-dance.jpg, and it doesn't exist.
Я немного поиграл с терминалом и обнаружил, что имена файлов изображений на сервере немного отличаются от тех, которые запрашивает WordPress. Несмотря на то, что они выглядят одинаково, специальные последовательности символов кодируются по-разному. Например, когда я копирую имя файла Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
от терминала это кодируется как Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
, С другой стороны, WordPress ищет файл Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
который не существует, конечно.
Обе системы (старый Gentoo и текущий Debian) настроены на использование языка на основе UTF-8.
Как решить?
Я думаю о трех возможных причинах:
- Debian хранит специальные символы в именах файлов иначе, чем Gentoo
- мой новый mysql хранит специальные символы не так, как старый
- nginx обрабатывает специальные символы иначе, чем Apache
Любые предложения, как опровергнуть эту гипотезу и, наконец, решить проблему?
1 ответ
Хорошо, я решил проблему, исправив имена файлов скриптом. Я думаю, что кодирование специальных символов было нарушено в какой-то момент, когда я копировал файлы между системами (Gentoo => Mac OS X => Debian). Не стесняйтесь использовать и редактировать мой скрипт, если у вас есть похожая проблема.