[WEDOS] Nette v podadresáři
- lukyer
- Člen | 33
Potřeboval jsem nette rozchodit v zanořené složkové struktuře
(domena.cz/aplikace/nette1) a je to pain!
Vyzkoušel jsem všechny možné návody, knowledge base, tipy tady z fóra a
nevyřešil jsem.
Po několika hodinách trápení s bláznivým wedosím .htaccess em kurvícím vše kvůli subdoménám/aliasům jsem se uchýlil k workaround řešení, které funguje, ale je pěkně otravné.
- zapomeňte na simple router, ten v této konfiguraci na wedosu nerozjedete
- veškeré routy prefixovat dle reálné URL:
public static function createRouter($prefix = '')
{
$router = new RouteList();
$router[] = new Route($prefix . 'trips/<action>', 'Trips:overview');
return $router;
}
v config.neon pak nastavit parametr:
parameters:
urlPrefix: '/aplikace/nette1/'
v config.local.neon (na localhostu vše funguje):
parameters:
urlPrefix: ''
A budete fungovat. Má to však neblahý důsledek – v šablonách {$basePath} vrací prázdný string (dává to smysl).
Takže pokračujeme – do BasePresenteru přidáme zhruba takovou ošklivost:
class BasePresenter extends Presenter
{
/** @var Nette\DI\Container @inject */
public $container;
/**
*/
public function beforeRender()
{
if ($this->template->basePath === '') {
$urlPrefix = $this->container->getParameters()['urlPrefix'];
$this->template->basePath = $urlPrefix;
}
}
}
No a podobně bychom měli samozřejmě vytvořit BaseControl pro komponenty, které by mohly na $basePath šahat taky.
Lepší varianta by asi byla napsat svůj router, ale to už se mi nad ránem nechce. No a úplně nejlepší varianta by byla rozplést ty .htaccess soubory od Wedosu + Nette a vyřešit to správně tam. Dobrovolníci? :)
- Tirus91
- Člen | 199
Toto mám vyzkoušené že mi běží na Wedosu. Víc ti nedám, sám jsem si musel hrát ;)
<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>
- lukyer
- Člen | 33
@Tirus91 todle je řešení ať nemusíš psát www do URL. To ještě vůbec neřeším. Nefunguje ani verze, kdy do URL www přidáš ručně. Nicméně i toto jsem zkoušel a nefungovalo.
Jsi si jist, že máš strukturu např. takovouto?
http://domena.cz/…vniNetteApka
http://domena.cz/…uhaNetteApka
..
?
- lukyer
- Člen | 33
Pravda, Nette se to asi moc netýká, je to problém Wedosu. Nicméně hodně lidí kombinaci Nette + Wedos používají, takže přikládám řešení podpory, která se po mém naléhání opravdu problémem zabývala:
Dobrý den,
předpokládám, že soubory Nette máte uloženy na FTP v adresáři /www/domains/domena.cz/aplikace/prvni/
V tomto případě opravdu způsobují nesprávné chování naše výchozí rewrite pravidla v souboru .htaccess, která se starají o směrování požadavků na aliasy a subdomény.
Řešením je obejít tyto pravidla definováním pravidla pro tuto konkrétní doménu a nasměrovat tak požadavky přímo do adresáře www aplikace Nette.
Ve Vašem případě by tedy bylo potřeba zapsat následující dvě pravidla do hlavního .htaccess souboru s našimi pravidly, ihned pod direktivu RewriteEngine On:
RewriteCond %{HTTP_HOST} ^(www\.)?lksolutions\.cz$
RewriteRule (.*) domains/lksolutions.cz/apps/msk/www/$1 [L]Potom by mělo routování Nette v pořádku fungovat.
Editoval lukyer (9. 7. 2015 12:46)