Mod rewrite
- pmg
- Člen | 372
Rewrite se provede jen pro příchozí adresy, bude proto nutné upravit
routu. Napadá mě použít filtr parametru, který hodnotu upraví do
požadované podoby, v routě pak bude <do>
.
Route::$styles['do'] = array(
Route::FILTER_IN => 'removeHtml',
Route::FILTER_OUT => 'addHtml',
);
Více v dokumentaci.
Editoval pmg (20. 7. 2009 21:11)
- Ondřej Mirtes
- Člen | 1536
Při používání Nette má mít .htaccess vždy jednotnou podobu (např. viz níže), protože všechny požadavky směřují na index.php a ten mechanismus „mapování“ adres se přesouvá právě na třídu Route v Nette.
RewriteEngine On
# configure PHP
php_flag magic_quotes_gpc off
php_flag register_globals off
RewriteBase /
# domain redirecting
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) http://www.example.com/$1 [R,L]
# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|ico|gif|jpg|png|rar|zip|tar\.gz)$ index.php [L]
- Ondřej Mirtes
- Člen | 1536
pmg napsal(a):
# domain redirecting RewriteCond %{HTTP_HOST} ^example\.com RewriteRule (.*) http://www.example.com/$1 [R,L]
Přesně obráceně…
Eh, to záleží, jestli preferuješ verzi s www nebo bez. Já s.
- Patrik Votoček
- Člen | 2221
Maliko OT: Když preferuji variantu s www a verzi bez www chci přesměrovávat na verzi s www. Tak je lepší toto provádět v htaccess souboru nebo dělat jednosměrnou routu která to přesměruje?
- pmg
- Člen | 372
Tohle jsem zrovna nedávno řešil. Když uděláš redirect v
.htaccess
, není nutné parsovat skripty, popř. spouštět PHP.
Přesměrování pak také funguje i u obrázků a jiných souborů, což asi
rozhodne. Výhoda dělat redirect přes Nette bude spíš koncepčního
charakteru (i když je pravda, že standardní routy to zas tak jednoduše a
koncepčně udělat stejně neumožňují). Můžeš třeba chtít rozeznávat
více subdomén, číst nastavení z databáze ap.
Dělám obrácenou věc, než požaduješ, a v bootstrapu mám toto:
$request = Environment::getHttpRequest();
$uri = $request->getUri();
$host = $uri->getHost();
if (String::startsWith($host, 'www.')) {
$uri = clone $uri;
$uri->setHost(substr($host, 4));
Environment::getHttpResponse()->redirect($uri, IHttpResponse::S301_MOVED_PERMANENTLY);
exit;
}
V .htaccess
zase toto:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)
RewriteRule (.*) http://%1/$2 [R=301,NE,QSA,L]
- Ondřej Mirtes
- Člen | 1536
blizz_boz napsal(a):
vďaka za rady ale tomu routovaniu absolútne nerozumiem asi som debil, pozeral som aj dokumentáciu a niečo som aj skúšal metódou pokus omyl ale zatiaľ bez výsledku skúsim sa s tým pohrať na localhoste. btw neni k tomu nejaký podrobný článok aj s príkladmi a s vysvetklením?
https://doc.nette.org/…tion/routing
https://doc.nette.org/…tion/routing
Největší článek: https://doc.nette.org/…tion/routing
https://forum.nette.org/…lady-routeru
https://forum.nette.org/…tipy-a-triky