Spatna detekce basePath pri specificke konfiguraci serveru (zejmena mod_vhost_alias)
- KingKoca
- Člen | 25
Ahoj, na aktuálním Nette 2.0.3 (namespace verze) a PHP 5.3 je spatne detekovana basePath, pokud je $_SERVER[‚DOCUMENT_ROOT‘] jiny (zpravidla o 1-x urovni vys nez je skutecny document root). Na testovacim serveru pouzivam mod_vhost_alias, ktery mi preklada subdomeny na adresare. Jak to funguje vysvetlim na prikladu:
- Dejme tomu, ze hostname je example.com
- Adresarova struktura (zjednodusene) je:
/var/www/
/var/www/web1/
/var/www/web2/
- DocumentRoot (a tedy i $_SERVER[‚DOCUMENT_ROOT‘] je /var/www
- VirtualDocumentRoot (z modulu vhost_alias) je nastaven na
/var/www/%-3+
. - Diky tomu se subdomena 3. a vyssiho radu preklada na adresare, nasledovne:
web1.example.com -> /var/www/web1
web2.example.com -> /var/www/web2
cokoliv.co.chci.example.com -> /var/www/cokoliv.co.chci
Tento postup mi umoznuje provozovat neomezene subdomen (slo by to samozrejme
i domeny nizsiho radu) v ruznych adresarich se zakladni cestou „/“, aniz
bych pro ne musel zvlast zakladat VirtualHosty. Ovsem modul vhost_alias nemeni
realny DocumentRoot, a tudiz promenna $_SERVER[‚DOCUMENT_ROOT‘] je i pro
subdomeny nastavena na na /var/www
. To funguje dobre, pokud opravdu
nepouzivam podadresar.
Pokud pouziju web1.example.com/testsubdir jako zakladni cestu k projektu („testsubdir“ ma byt basePath), Nette to nedetekuje a basePath je stale „/“ a pathInfo je /testsubdir/moje/url.
$_SERVER potom vypada nejak takto:
["DOCUMENT_ROOT"]=> "/var/www",
["SCRIPT_FILENAME"]=> "/var/www/web1/testsubdir/index.php",
["REQUEST_URI"]=> "/testsubdir/moje/url",
["SCRIPT_NAME"]=> "/testsubdir/index.php",
["PHP_SELF"]=> "/testsubdir/index.php"
Resenim v tomto pripade je z REQUEST_URI odstranit zacatek ktery se rovna dirname($_SERVER[‚SCRIPT_NAME‘]). Nevim, jestli je toto reseni univerzalni. Moje otazka je, jestli je nejake jine reseni, nejake spravne, nebo jestli jste tento problem taky nekdy resili. Jedna se mi hlavne o spravne nastaveni scriptPath a tim padem i pathInfo – skutecna cesta v aplikaci.
PS: Tento problem je soucasne i timto: https://forum.nette.org/…updatu-nette avsak nabizene reseni je cunarna.
Editoval KingKoca (5. 7. 2012 22:03)
- KingKoca
- Člen | 25
Aha, tak se omlouvam, zjistil jsem problem u sebe.
Pokud jsem mel potomka tridy UrlScript a do constructoru jsem mu dal
parent::__construct($request->getUrl()->getAbsoluteUrl());
,
tak ten potomek mel spatne cesty.
Ovsem puvodni $request->getUrl()
objekt ma tyto cesty spravne
a v poradku. Upravil jsem svuj kod, abych nepouzival potomka UrlScript, ale
pouzil primo objekt z HttpRequestu.
Muj novy dotaz je: Mohu nejakym zpusobem udelat potomka tridy UrlScript (potrebuju rozsirit jeho funkcnost) tak, aby parsovana Url mela spravne vlastnosti? Diky za radu