Instalace Nette na Endora.cz článek
Nette je populární český PHP framework. Následující krátký návod vám pomůže s instalací.
Základní instalace
- Založte nový prostor a založte pro něj FTP.
- Vytvořte si projekt lokálně na PC - ideální postup je pomocí composeru:
composer create-project nette/web-project
Více informací najdete na stránce Nette věnované instalaci.
- Ve všech adresářích kromě www vytvořte .htaccess, který zamezí zobrazení souborů, např:
Order Allow,Deny Deny from all
- V root složce projektu (tedy nad app, www atd.) je nutné vytvořit .htaccess zajišťující přesměrování požadavků do www/ , např:
<IfModule mod_rewrite.c>
RewriteEngine On RewriteRule ^$ www/ [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/www/ RewriteRule ^(.*)$ www/$1
</IfModule> - Smažte na FTP ve složce web soubor
index.php
, zkopírujte data z./web-project/*
na FTP do složkyweb
, alternativně můžete použít Správce souborů. - Hotovo, na root URL webu byste měli vidět novou instalaci Nette :-)
Nette, HTTPS a Endora
1. Soubor .htaccess pro přesměrování z http:// na https://
V default .htaccesu Nette je zakomentovana
# use HTTPS
# RewriteCond %{HTTPS} !on
# RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L] RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Toto odkomentujte, ale přidejte ještě jednu podmínku
# use HTTPS
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP:X-Forwarded-Proto} !^https$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,NE,L] RewriteRule .? https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
2. Aplikace
V aplikaci (treba www/index.php, nebo app/bootstrap.php) přidejte hack, který způsobí, že Nette bude považovat port 80 za default pro https protokol
if ('https' === getenv('HTTP_X_FORWARDED_PROTO')) {
\Nette\Http\Url::$defaultPorts['https'] = (int) getenv('SERVER_PORT');
}
Teď by se absolutní url měly generovat bez portu. Vyzkoušejte třeba v šabloně, <a n:href="//Homepage:default">test odkazu</a>
TL;DR
Endora hosting funguje přes nginx proxy. To znamená, že požadavek, který vidí aplikace, není přímý požadavek uživatele, ale již předaná komunikace nginx - apache. V praxi to má jednu nevýhodu, globální proměnná $_SERVER['SERVER_PORT'] není nastavena na reálnou hodnotu, ale na port 80. Nette\Http\Url očekává pro https port 443, ale dostává informaci o portu 80, takže při generování absolutní url přidává port 80 k hostu, což samozřejmě způsobí nefunkčnost takového odkazu. Vyzkoušejte třeba v šabloně, <a n:href="//Homepage:default">test odkazu</a>
Bohužel zatím neexistuje úplně čisté řešení. Detekci HTTPS je možné provést například pomocí 'https' === getenv('HTTP_X_FORWARDED_PROTO')
. Btw, proměnná $_SERVER['HTTPS'] by měla být korektně nastavena.
Krom výše uvedeného řešení, které bude mít vliv jen na Nette, je samozřejmě možné přepsat hodnoty v $_SERVER proměnné. To pak bude fungovat pro všechny další knihovny atd. Zápis do superglobálních proměnných se ale obecně moc nedoporučuje, proto bychom doporučovali spíše vždy individuální řešení pro dané části.
Článek ještě nikdo nehodnotil, buďte první!
Přidejte váš komentář a hodnoceníVáš komentář a hodnocení
Váš komentář se po zpracování může objevit v seznamu komentářů, případně i s reakcí od nás. Za zaslaný komentář i hodnocení předem děkujeme.