Mod rewrite

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
blizz_boz
Člen | 6
+
0
-

ako nastaviť .htaccess tak aby som namiesto tvaru /?do=contact mohol použiť tvar /contact.html

skúšal som toto:

RewriteEngine on
RewriteRule (.*)/(.*).html $1/?do=$2

funguje to ale tvar URL sa vždy zmení na ten pôvodný.

pmg
Člen | 372
+
0
-

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
+
0
-

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]
pmg
Člen | 372
+
0
-
# domain redirecting
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) http://www.example.com/$1 [R,L]

Přesně obráceně…

Ondřej Mirtes
Člen | 1536
+
0
-

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
+
0
-

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
+
0
-

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]
pmg
Člen | 372
+
0
-

LastHunter, vlastně jsem chtěl říct „Přesně obráceně… ;-)“.

blizz_boz
Člen | 6
+
0
-

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?

Ondřej Mirtes
Člen | 1536
+
0
-

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

blizz_boz
Člen | 6
+
0
-

LastHunter

dík ale toto som už všetko pozeral asi si to budem musieť vyskúšať.