TinyMCE špatné htacces/routování? Nekompatibilita s nette?
- Kakaku
- Člen | 27
Zdravím,
mám problém. Koupil jsem si plugin TinyMCE image manager a úspěšně ho
zprovoznil.
Vše funguje jak má, jediná věc je náhled obrázku před vložením →
nezobrazuje se.
TinyMCE volá pro náhled následující URL:
http://localhost/…timthumb.php?…
Ta URL hlásí:
A TimThumb error has occured
The following error(s) occured:
Could not find the internal image you specified.
Query String :
src=http://localhost/CMS/uploads/articles_content/FILE-20160714–2350ZUQ3URDNU2QE.jpg&w=130&h=90
TimThumb version : 2.8.10
Ten obrázek je normálně přístupný, když nechám cestu http://localhost/…URDNU2QE.jpg , tak se zobrazí normálně. Z nějakého důvodu, při volání z pluginu je chyba.
Proč to souvisí s nette – myslím si to, protože když jsem měl soubor v localhost/tinyMCE_TEST/, načítalo se to normálně. Je nějaký problém s routováním, nebo htaccess?
Tato funkce vrací lokální cestu k souboru.
protected function getLocalImagePath($src){
$src = ltrim($src, '/'); //strip off the leading '/'
if(! $this->docRoot){
$this->debug(3, "We have no document root set, so as a last resort, lets check if the image is in the current dir and serve that.");
//We don't support serving images outside the current dir if we don't have a doc root for security reasons.
$file = preg_replace('/^.*?([^\/\\\\]+)$/', '$1', $src); //strip off any path info and just leave the filename.
if(is_file($file)){
return $this->realpath($file);
}
return $this->error("Could not find your website document root and the file specified doesn't exist in timthumbs directory. We don't support serving files outside timthumb's directory without a document root for security reasons.");
} //Do not go past this point without docRoot set
//Try src under docRoot
if(file_exists ($this->docRoot . '/' . $src)) {
$this->debug(3, "Found file as " . $this->docRoot . '/' . $src);
$real = $this->realpath($this->docRoot . '/' . $src);
if(stripos($real, $this->docRoot) === 0){
return $real;
} else {
$this->debug(1, "Security block: The file specified occurs outside the document root.");
//allow search to continue
}
}
//Check absolute paths and then verify the real path is under doc root
$absolute = $this->realpath('/' . $src);
if($absolute && file_exists($absolute)){ //realpath does file_exists check, so can probably skip the exists check here
$this->debug(3, "Found absolute path: $absolute");
if(! $this->docRoot){ $this->sanityFail("docRoot not set when checking absolute path."); }
if(stripos($absolute, $this->docRoot) === 0){
return $absolute;
} else {
$this->debug(1, "Security block: The file specified occurs outside the document root.");
//and continue search
}
}
$base = $this->docRoot;
// account for Windows directory structure
if (strstr($_SERVER['SCRIPT_FILENAME'],':')) {
$sub_directories = explode('\\', str_replace($this->docRoot, '', $_SERVER['SCRIPT_FILENAME']));
} else {
$sub_directories = explode('/', str_replace($this->docRoot, '', $_SERVER['SCRIPT_FILENAME']));
}
foreach ($sub_directories as $sub){
$base .= $sub . '/';
$this->debug(3, "Trying file as: " . $base . $src);
if(file_exists($base . $src)){
$this->debug(3, "Found file as: " . $base . $src);
$real = $this->realpath($base . $src);
if(stripos($real, $this->realpath($this->docRoot)) === 0){
return $real;
} else {
$this->debug(1, "Security block: The file specified occurs outside the document root.");
//And continue search
}
}
}
Routování:
public static function createRouter()
{
$router = new RouteList;
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'module' => 'Core',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
$router[] = new Route('<category>', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'category'
));
$router[] = new Route('<category>/<article>', array(
'module' => 'Front',
'presenter' => 'Article',
'action' => 'view'
));
$router[] = new Route('[<presenter>]', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default'
));
return $router;
}
Htaccess v rootu (tohle asi je k ničemu)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)(\.)?(.*)?$
RewriteRule ^$ www/ [L]
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)(\.)?(.*)?$
RewriteRule (.*) www/$1 [L]
Htaccess složky WWW
# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)
# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>
# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\.(?!well-known/) - [F]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>
# enable gzip compression
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json application/xml image/svg+xml
</IfModule>
</IfModule>
Za jakoukoli pomoc budu nesmírně vděčný,
díky
- GEpic
- Člen | 566
Neni problém s velkými písmeny v názvu souboru / obrázku?
Pokud to volá tuhle URL:
http://localhost/…timthumb.php?…
Tak se obávám, že to s Nette nesouvisí (ale klidně mě opravte).
Jen doporučení, pokud vyvíjíš na localhostu, tak se .htaccess v rootu vyhni a radši si do url to www zadej, časem to oceníš. :D … Na kvalitním hostingu jde vyřešit situace s „www“ i bez .htaccess.
Editoval GEpic (15. 7. 2016 0:25)
- Šaman
- Člen | 2666
Kakaku napsal(a):
[code]
# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\.(?!well-known/) – [F]
[/code]
Htaccess nerozumím ani za mák, ale zde by mohl být zakopaný pes (chápu to správně, že toto má zakázat zobrazování prohlížečům, tedy i scriptům) nebo ne?
To se týká jen souborů s tečkou na začátku, takže třeba
.htaccess
.
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
Tohle zařídí přesměrování všech souborů kromě
vyjmenovaných přípon na soubor index.php
. Takže si někdo
nemůže prohlédnout třeba config.neon
i kdyby byl ve veřejném
adresáři. Obrázků se to ale netýká.