Nefunkční aplikace na active24
- jarda256
- Člen | 130
Ahoj, mám takový problém. Překopíroval jsem svojí aplikaci na ftp, promazal cache a teď dostávám od tracy akorát že nemůže najít šablonu. Nedá se změnit kořenový adresář, tak jsem přidal htaccess (viz. níže). Ale vůbec nechápu, proč tedy nemůžu normálně fungovat. Předem díky za rady.
Page not found. Missing template '…/www/doc/www.domena.cz/www/app/presenters/Sign/templates/Sign/in.latte'
Page not found. Missing template '…/www/app/presenters/Homepage/templates/Homepage/default.latte'
místo doména mám svojí doménu, ale nechtěl jsem upozorňovat na konkrétní aplikaci, která je v současné době nezabezpečená
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{ENV:HTTPS} !^.*on
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R,L]
RewriteCond %{HTTP_HOST} ^(www\.)?domena\.cz$
RewriteRule ^$ www/ [L]
RewriteCond %{HTTP_HOST} ^(www\.)?domena\.cz$
RewriteRule (.*) www/$1 [L]
- David Grudl
- Nette Core | 8218
Čistě OT: u toho druhého přesměrování kvůli HTTPS nemá být
https://www.%{HTTP_HOST}/$1
, ale
jen https://%{HTTP_HOST}/$1
- jarda256
- Člen | 130
@DavidGrudl htaccess jsem tedy pozměnil, ale chyba přetrvává (cache sem promazal)
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{ENV:HTTPS} !^.*on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]
RewriteCond %{HTTP_HOST} ^(www\.)?domena\.cz$
RewriteRule ^$ www/ [L]
RewriteCond %{HTTP_HOST} ^(www\.)?domena\.cz$
RewriteRule (.*) www/$1 [L]
struktura ftp
www
---app
---vendor
---www
…
Editoval jarda256 (21. 12. 2016 16:11)
- jarda256
- Člen | 130
Mám upravenou strukturu a podle ní jsem upravoval i formateTemlateFiles a formateLayoutFiles. Na localhostu vše šlo správně :(
app
├── modules
│ ├── Web
│ │ ├── presenters
│ │ │ ├── Default
│ │ │ │ ├── templates
│ │ │ │ │ └── default.latte
│ │ │ │ └── DefaultPresenter.php
│ │ │ └── Product
│ │ │ ├── templates
│ │ │ │ ├── default.latte
│ │ │ │ └── edit.latte
│ │ │ └── ProductPresenter.php
│ │ └── templates
│ │ └── @layout.latte
│ └── Admin
│ ├── modules
│ │ └── (more modules)
│ ├── presenters
│ │ └── Default
│ │ ├── templates
│ │ │ └── default.latte
│ │ └── DefaultPresenter.php
│ └── templates
│ └── @layout.latte
├── presenters
│ └── Base
│ └── BasePresenter.php
└── templates
└── @layout.latte
public function formatLayoutTemplateFiles()
{
if (preg_match('#/|\\\\#', $this->layout)) {
return [$this->layout];
}
list($module, $presenter) = Helpers::splitName($this->getName());
$layout = $this->layout ? $this->layout : 'layout';
$dir = dirname($this->getReflection()->getFileName());
$dir = is_dir("$dir/templates") ? $dir : dirname($dir);
$list = [
"$dir/templates/$presenter/@$layout.latte",
"$dir/templates/$presenter.@$layout.latte",
];
do {
$list[] = "$dir/templates/@$layout.latte";
$dir = dirname($dir);
} while ($dir && $module && (list($module) = Helpers::splitName($module)));
return $list;
}
/**
* Formats view template file names.
* @return array
*/
public function formatTemplateFiles()
{
list(, $presenter) = Helpers::splitName($this->getName());
$dir = dirname($this->getReflection()->getFileName());
$dir = is_dir("$dir/templates") ? $dir : dirname($dir);
return [
"$dir/templates/$presenter/$this->view.latte",
"$dir/templates/$presenter.$this->view.latte",
];
}
- jarda256
- Člen | 130
Funkce jsem upravil, ale teď při přihlašování zase vyhazuje chybu doctrine :(
Doctrine\Common\Annotations\AnnotationException
[Semantical Error] The annotation "@Doctrine\ORM\Mapping\manyToMany" in property App\Model\Entities\User::$groupsToEdit does not exist, or could not be auto-loaded.
public function formatLayoutTemplateFiles()
{
if (preg_match('#/|\\\\#', $this->layout)) {
return [$this->layout];
}
list($module, $presenter) = Helpers::splitName($this->getName());
$layout = $this->layout ? $this->layout : 'layout';
$dir = dirname($this->getReflection()->getFileName());
// dump($dir);
$dir = is_dir("$dir/$presenter") ? $dir : dirname($dir);
// dump($dir);
$list = [
"$dir/$presenter/templates/@$layout.latte",
"$dir/$presenter/templates.@$layout.latte",
];
do {
$list[] = dirname($dir)."/templates/@$layout.latte";
$dir = dirname($dir);
} while ($dir && $module && (list($module) = Helpers::splitName($module)));
// dump($list);
return $list;
}
/**
* Formats view template file names.
* @return array
*/
public function formatTemplateFiles()
{
list(, $presenter) = Helpers::splitName($this->getName());
$dir = dirname($this->getReflection()->getFileName());
$dir = is_dir("$dir/templates") ? $dir : dirname($dir);
$list = [
"$dir/templates/$this->view.latte",
"$dir/templates.$this->view.latte",
];
// dump($list);
return $list;
}
- jarda256
- Člen | 130
@DavidGrudl Ještě poslední problém s přesměrováním. Když se příhlásím, tak bych se měl dostat https://www.domena.cz/admin/ ale přesměruje mě to na https://www.domena.cz:80/admin/ ?? Jak je to možné? V dokumentaci je u HTTPS TODO
Editoval jarda256 (21. 12. 2016 17:09)
- Gappa
- Nette Blogger | 208
jarda256 napsal(a):
@DavidGrudl Ještě poslední problém s přesměrováním. Když se příhlásím, tak bych se měl dostat https://www.domena.cz/admin/ ale přesměruje mě to na https://www.domena.cz:80/admin/ ?? Jak je to možné? V dokumentaci je u HTTPS TODO
Na Active24 mají tuším proxy, za kterou již veškerý provoz běhá nešifrovaně, proto ten port 80.
- Gappa
- Nette Blogger | 208
jarda256 napsal(a):
@Gappa Dobře, ale pokud chci použít getUsermedia, tak musím mít https. Dá se to nějak pořešit?
Našel jsem tohle:
Ale to popravdě nevím, jak by se mělo nastavit – neznám IP té proxy, jestliže je transparentní, tak asi ani zacílit nejde? Nevím, zas tak se v této problematice nevyznám…
Nicméně, pro Active24 by mělo jít použít tento „hack“ (je linkovaný i v tom odkazu výše):
Nebo i něco jednoduššího v tomhle stylu (do index.php):
<?php
if (!empty($_SERVER['HTTPS']) && 'off' !== $_SERVER['HTTPS']) {
$_SERVER['SERVER_PORT'] = 443;
}
?>
Pokud zná někdo lepší způsob (nebo jak pro Active24 nastavit tu proxy), tak sem s tím :)
- jarda256
- Člen | 130
@Phalanx A použil si stejný kod? A vložil jej do index.php?? Já vložil takto ale bez výsledku
$container = require __DIR__ . '/../app/bootstrap.php';
$container->getByType(Nette\Application\Application::class)->run();
if (!empty($_SERVER['HTTPS']) && 'off' !== $_SERVER['HTTPS']) {
$_SERVER['SERVER_PORT'] = 443;
}
- Phalanx
- Člen | 310
@jarda256 dej ten kód na první řádek, ne až po volání containeru :)
<?php
if (!empty($_SERVER['HTTPS']) && 'off' !== $_SERVER['HTTPS']) {
$_SERVER['SERVER_PORT'] = 443;
}
$container = require __DIR__ . '/../app/bootstrap.php';
$container->getByType(Nette\Application\Application::class)->run();
?>
- David Grudl
- Nette Core | 8218
Docela by mě zajímalo, až to vyřešíte, jestli
- je to chyba hostingu, takže řešení je workaround
- je to chyba v Nette, takže řešení je poslat PR
- je to chyba ve starší verzi Nette a už je to opravené
- chybělo nastavení
http.proxy
v configu – což není zdokumentované
Protože podobné věci tu vídám řešit už dlouhé roky a divím se proč, už měl přece dávno přijít PR s opravou kódu nebo doplněním docky.
cc @FilipProcházka @pata.kusik111
- redwormik
- Člen | 6
Jiný hosting (WebCloud), stejná chyba (Nette správně pozná HTTPS, ale
generuje URL s portem 80). Vyřešil jsem workaroundem s přepisem
$_SERVER['SERVER_PORT']
.
Z phpinfo():
$_SERVER['HTTPS'] === 'On';
$_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https'; // jediná X_FORWARDED hlavička
$_SERVER['SERVER_PORT'] === 80;
$_SERVER['SERVER_ADDR']
je veřejná, ale jiná než IP podle
DNS. $_SERVER['REMOTE_ADDR']
odpovídá IP klienta, proto nejde
použít nastavení http.proxy
.
Editoval redwormik (22. 12. 2016 21:46)
- jarda256
- Člen | 130
David Grudl napsal(a):
Docela by mě zajímalo, až to vyřešíte, jestli
- je to chyba hostingu, takže řešení je workaround
- je to chyba v Nette, takže řešení je poslat PR
- je to chyba ve starší verzi Nette a už je to opravené
- chybělo nastavení
http.proxy
v configu – což není zdokumentovanéProtože podobné věci tu vídám řešit už dlouhé roky a divím se proč, už měl přece dávno přijít PR s opravou kódu nebo doplněním docky.
cc @FilipProcházka @pata.kusik111
Pro mě je funkčním řešením. Řekl bych, že chyba je na straně hostingu.
if (!empty($_SERVER['HTTPS']) && 'off' !== $_SERVER['HTTPS']) {
$_SERVER['SERVER_PORT'] = 443;
}
$container = require __DIR__ . '/../app/bootstrap.php';
$container->getByType(Nette\Application\Application::class)->run();
- Gappa
- Nette Blogger | 208
Konkrétněji k Active24:
Edit: Active24 změnil odkaz, pokud by přestal fungovat redirect, tak je to zde:
Poslední část úplně dole:
- Implementace HTTPS (.htaccess přesměrování)
Editoval Gappa (2. 11. 2017 20:18)