[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)