Apache alias + routy
- Aurielle
- Člen | 1281
Mám na localhostu v apachi definovaný alias:
Alias /runescapewikicz "C:/xampp/htdocs/rswcz/document_root/"
Když přes něj přistupuji ke své aplikaci a mám nastaveny routy, laděnka mi vypíše při jakémkoliv jiném požadavku než Default:default chybu:
BadRequestException #404
Cannot load presenter 'Runescapewikicz', class 'RunescapewikiczPresenter' was not found in 'C:\xampp\htdocs\rswcz\document_root/../app/presenters/RunescapewikiczPresenter.php'.
Při přístupu přes normální (nealiasovou) adresu (http://localhost/…cument_root/…) fungují routy normálně…
- Aurielle
- Člen | 1281
// Set routes
$router = $application->getRouter();
// Filter table
Route::setStyleProperty('presenter', Route::FILTER_TABLE, array(
'uzivatel' => 'User',
'aktualizace' => 'Rsnews',
));
Route::setStyleProperty('action', Route::FILTER_TABLE, array(
'prihlaseni' => 'login',
'registrace' => 'register',
'zapomenute-heslo' => 'forget',
'archiv' => 'archive',
));
// Canonication
$router[] = new Route('index.php', array(
'presenter' => 'Default',
'action' => 'default',
), Route::ONE_WAY);
// RSNews route
$router[] = new Route('aktualizace/<id>', array(
'presenter' => 'Rsnews',
'action' => 'default',
));
// Feed
$router[] = new Route('rss.xml', array(
'presenter' => 'Rss',
'action' => 'default',
));
// General route
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Default',
'action' => 'default',
'id' => NULL,
));
- Tomik
- Nette Evangelist | 485
Zřejmě se jedná o bug, protože pokud toto chování u sebe simuluji,
Nette považuje v takové případě http://localhost/
za root pro
web, i když to je až http://localhost/runescapewikicz/
, chybně
tedy řetězec runescapewikicz
naparsuje podle
poslední Routy…
Na toto
<?php
$uri = Environment::getHttpRequest()->getUri();
Debug::dump($uri->getBaseUri);
?>
Nette vrací http://localhost/
, i když by asi mělo vracet
http://localhost/runescapewikicz/
.
Davide?
- Aurielle
- Člen | 1281
Pomůže, nicméně při nenastaveném RewriteBase by měly routy fungovat na obou adresách, a takhle je to buď a nebo…
(při nastavení RewriteBase na /runescapewikicz/ funguje http://localhost/…wikicz/routa, ale http://localhost/…nt_root/rout hází No route for HTTP request.)
- David Grudl
- Nette Core | 8218
Zřejmě se správně neprovede detekce adresy document_rootu.
$request = Environment::getHttpRequest();
echo $request->uri->scriptPath; // co to vypíše?
// oprava
$fixedUri = clone $request->uri;
$fixedUri->scriptPath = '/runescapewikicz/';
$request->uri = $fixedUri;
- David Grudl
- Nette Core | 8218
Ale mělo by vypsat '/runescapewikicz/'
, takže buď fixnout v
.htaccess nebo bootstrapu výše uvedeným kódem.