Sonderzeichen in Dateinamen + nginx + php = 404

1827
Mikołaj Pastuszko

Vor kurzem bin ich auf einen neuen Server umgezogen, nachdem der alte gestorben war. Ich hatte dort eine WordPress-Installation, die von Apache2 und Gentoo Linux unterstützt wurde. Beim Umzug entschied ich mich, stattdessen Nginx und Debian zu verwenden. Ich brachte mein Wordpress zurück zur Arbeit und alles wäre gut, wenn nicht für ein bisschen ...

Problem

Bilder, die Sonderzeichen in den Dateinamen enthalten, werden nicht geladen. Ich bekomme 404 Not Found . Zum Beispiel bei der Anfrage

http://my_site/wp-content/uploads/2013/05/Zajęcia-dla-dorosłych-z-bollywood-dance.jpg 

WordPress antwortet

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. 

Ich spielte eine Weile mit dem Terminal und stellte fest, dass die Dateinamen auf dem Server ein wenig von den von WordPress angeforderten Dateinamen abweichen. Obwohl sie identisch aussehen, sind spezielle Zeichenfolgen auf unterschiedliche Weise codiert. Wenn ich beispielsweise Dateiname Zajęcia-dla-dorosłych-z-bollywood-dance.jpgvom Terminal kopiere, wird er als codiert Zajęcia-dla-dorosłych-z-bollywood-dance.jpg. Auf der anderen Seite sucht WordPress nach Dateien, Zajęcia-dla-dorosłych-z-bollywood-dance.jpgdie natürlich nicht existieren.

Beide Systeme (das alte Gentoo und das aktuelle Debian) verwenden UTF-8-basierte Ländereinstellungen.

Wie löst man?

Ich denke über drei mögliche Gründe nach:

  • Debian speichert Sonderzeichen in Dateinamen anders als Gentoo
  • mein neues mysql speichert Sonderzeichen anders als das alte
  • Sonderzeichen werden von nginx anders behandelt als in Apache

Irgendwelche Vorschläge, wie man diese Hypothese fälschen und schließlich das Problem lösen kann?

2

1 Antwort auf die Frage

1
Mikołaj Pastuszko

Ok, ich habe das Problem gelöst, indem ich die Dateinamen mit einem Skript korrigierte . Ich denke, dass die Kodierung von Sonderzeichen irgendwann unterbrochen wurde, als ich die Dateien zwischen Systemen kopiert hatte (Gentoo => Mac OS X => Debian). Fühlen Sie sich frei, mein Skript zu verwenden und zu bearbeiten, wenn Sie ein ähnliches Problem haben.