404 pro soubory s diakritikou v názvu

Honza Pl

404 pro soubory s diakritikou v názvu
« kdy: 24. 11. 2013, 17:21:06 »
Ahoj,

s Linuxem začínám a narazil jsem na jeden problém, s kterým si nevím rady. Mám server s CentOS, kde mám spoustu souborů s diakritikou v názvu. Problémem je, že v prohlížeči se tyhle soubory nezobrazují a výsledkem je 404 , např. místo obrázku na http://example.com/ščř.jpg dostanu 404: "The requested URL /ščř.jpg was not found on this server."

Nevím, v čem je chyba. Napadají mě dvě možnosti - původně byly soubory na serveru s Windows, pak jsem se přes Win7 PC nahrál na linuxový server. Nebo je špatné nastavení linuxu (locale apod.), to jsem ale vyčetl z netu, sám tomu bohužel nerozumím  :(

Příkaz ls ukazuje soubory s českou diakritikou. Zkoušel jsem přidat  "LC_ALL="cs_CZ.UTF-8" do souboru i18n, ale to nepomohlo.

Mohl bych poprosit o radu, jak to spravit?

Děkuju, Honza

/$ locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

i18n:
LANG="cs_CZ.UTF-8"
SYSFONT="latarcyrheb-sun16"
LC_ALL="cs_CZ.UTF-8" //přidal jsem já

PS: Vím, že diakritika v názvu souboru je zlo, ale přejmenovat je teď není možné, vzhledem k množství souborů a taky tomu, že názvy souborů jsou v databázi na různých místech a automaticky to nelze odstranit. Díky



JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:404 pro soubory s diakritikou v názvu
« Odpověď #1 kdy: 24. 11. 2013, 21:58:33 »
Ja mam locales takle (nerikam, ze je to dobre):
jarda@esus:/etc$ locale
LANG=en_GB.UTF-8
LANGUAGE=
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

Vyrobil jsem obrazek s diakritikou v nazvu a Seamonkey to otevre bez problemu.

Honza Pl

Re:404 pro soubory s diakritikou v názvu
« Odpověď #2 kdy: 24. 11. 2013, 22:09:20 »
Díky za reakci.

No já mám podezření, že to bude dělat tohle nastavení (ale jsem fakt amatér). A mohl bys mi prosím poradit, jak/kde to opravit? Už jsem to hledal po netu, ale nenašel jsem způsob, kterým bych tyhle hodnoty ovlivnil...

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:404 pro soubory s diakritikou v názvu
« Odpověď #3 kdy: 24. 11. 2013, 22:44:06 »
Hm, to bude horsi. Ja to tam asi naklikal pri instalaci, nekolik verzi Blbuntu tomu nazad. Ale asi to je v /etc/default/locale, kde mam LANG="en_GB.UTF-8".

Na CentOSu by ten soubor mohl byt jinde, zkus locate /locale|grep /etc . A mozna, ze je toho jinak vice, z CentOSu jsem akorat nekde na webu zahledl logo, tak zrovna nevim. Ja jsem na Debianu a Blbuntu.

Honza Pl

Re:404 pro soubory s diakritikou v názvu
« Odpověď #4 kdy: 25. 11. 2013, 08:17:42 »
Jardo, díky za reakci, zkusím se na to dneska podívat, popř. poptat přímo na centos fóru a uvidíme...
« Poslední změna: 25. 11. 2013, 10:51:28 od Petr Krčmář »


narg

Re:404 pro soubory s diakritikou v názvu
« Odpověď #5 kdy: 25. 11. 2013, 08:23:39 »
Fedora:
[ovlach@o-249-60 ~]$ cat /etc/locale.conf
LANG="cs_CZ.UTF-8"

bob

Re:404 pro soubory s diakritikou v názvu
« Odpověď #6 kdy: 25. 11. 2013, 09:25:45 »
typujem to na zle nastavenie toho aplikacneho/weboveho servra - napr. v tomcat-e je to parameter "URIEncoding" daneho konektoru (nepisete, aky aplikacny/webovy server tam mate)

Honza Pl

Re:404 pro soubory s diakritikou v názvu
« Odpověď #7 kdy: 25. 11. 2013, 13:06:09 »
Narg, JardP: zvláštní je, že v i18n mám nastaveno cs_CZ.UTF-8, ale na locale se to nechytá..
Bob: mrknu na to, díky

Trochu jsem ještě zkoušel a chování problému je tedy následující:
Adresa s diakritikou, např. http://example.com/š.php - Nefunguje, výsledkem 404
Adresa http://example.com/test.php obsahující include("š.php"); - Funfuje, obsah souboru š.php se vloží do test.php
Adresa http://example.com/test.php?a=ěščřžý - přes GET se předává hodnota proměnné $_GET["a"] ve správném tvaru s diakritikou

Pajk

Re:404 pro soubory s diakritikou v názvu
« Odpověď #8 kdy: 25. 11. 2013, 14:10:50 »
Jen takový malý nápad: nepomohlo by v /etc/sysconfig/httpd nastavit na to cs_CZ.UTF-8 proměnnou HTTPD_LANG (standardně =C). Netuším sice, jak se to bude chovat při jiném kódování html stránky než utf-8, ale třeba by se tím mohl nastavit nějký vhodný globál, výchozí stav ...

Sten

Re:404 pro soubory s diakritikou v názvu
« Odpověď #9 kdy: 25. 11. 2013, 14:56:01 »
Jestli je to Apache, zkusil bych do nastavení přidat AddDefaultCharset utf-8.

Re:404 pro soubory s diakritikou v názvu
« Odpověď #10 kdy: 25. 11. 2013, 15:26:41 »
Hoj, neni to moc dlouho, co jsem si resil v php skriptik, ktery mi nacte soubory v adresari a da mi je k dispozici jako link ke stazeni. Pak prisel bezny uzivatel, kterej tam nahral, kupodivu, soubory s mezerama a cestinou v nazvu souboru. Musel jsem nadefinovat ve skriptu kodovou stranku v sekci <HEAD>:
...
<META HTTP-EQUIV="Content-Type" content="text/html;charset=utf-8">
...
..
..
<?php ...
... ?>

Kodovani apache jsem nechaval, distribuce je opensuse. Neni jiz problem se odkazovat napriklad na soubor "Pracovní řády.pdf".

Honza Pl

Re:404 pro soubory s diakritikou v názvu
« Odpověď #11 kdy: 25. 11. 2013, 21:21:29 »
Zkoušel jsem Vaše rady, ale nic nepomohlo. AddDefaultCharset už bylo nastavené, HTTPD_LANG nezabral, URIencoding - nemam Tomcat, pravděpodobně jen CentOS + Apache HTTP.

Při zkoušení nastavení se mi akorát podařilo něco nastavit tak, že ani v PHP už nefunguje include("š.php") a když zadám přímo do prohlížeče název souboru po urlencode(tzn. převedený např. na %C5%A1.php), tak se mi převede zpět na českou diakritiku (na š.php).

Honza Pl

Re:404 pro soubory s diakritikou v názvu
« Odpověď #12 kdy: 25. 11. 2013, 23:57:50 »
Zjistil jsem, v čem byl problém - ve mně. Při logování přes WinSCP jsem nastavil omylem SCP místo SFTP - tím se to celé pokazilo. Přepnul jsem to, znova se nalogoval a všechny chyby v názvech byly krásně vidět, jako v Putty. Zkušebně jsem přehrál pár souborů a fungují :) Moc děkuju za pomoc!

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:404 pro soubory s diakritikou v názvu
« Odpověď #13 kdy: 26. 11. 2013, 00:35:43 »
Tohle nejak nechapu. Mluvil jste o prohlizeci a ted za to najednou muze WinSCP....

Honza Pl

Re:404 pro soubory s diakritikou v názvu
« Odpověď #14 kdy: 26. 11. 2013, 08:28:19 »
Můžu za to především já, protože jsem to WinSCP špatně nastavil...
Situace byla taková: WinSCP ukazovala diakritiku správně ale server tyto soubory neviděl -> myslel jsem si, že chyba je v nastavení serveru.

Nicméně ve skutečnosti to bylo tak, že soubory na serveru byly nahrané špatně (místo diakritiky otazník - to jsem zjistil přes Putty), takže 404 byla vyhodnocená správně. Způsobené to bylo tím, že jsem nahrával přes SCP místo SFTP.