Routování jazyku podle domény

Miri
Člen | 117
+
0
-

Ahoj měl bych na vás menší dotáz.

moje aktuální routa vypadá následovně:

$router[] = new Route('[<lang=cs [a-z]{2}>/][<prom1>/][<prom2>/][<prom3>/]', 'Homepage:default');

(pro jednu domény a více jazyků)
Nyní:
domena.cz/clanek/myš
domena.cz/en/article/mouse

Potřeboval bych ale jazyk defaultně rozlišit pro dané domény

$router[] = new Route('//domena.cz/[<lang=cs [a-z]{2}>/][<prom1>/][<prom2>/][<prom3>/]', 'Homepage:default');
$router[] = new Route('//domena.com/[<lang=en [a-z]{2}>/][<prom1>/][<prom2>/][<prom3>/]', 'Homepage:default');

Mělo by být
domena.cz/clanek/mys
domena.com/article/mouse (zvolí se defaultně en)

Toto mi ovšem nefunguje a přesměruje to vždy na .cz/en

Předem díky za každou pomoc.
Míra

jiri.pudil
Nette Blogger | 1028
+
+1
-

To bude tím, že v té první routě sice specifikuješ „cs“ jako výchozí hodnotu parametru lang, ale ne jedinou, protože [a-z]{2} matchne i „en“, takže první routa vygeneruje platnou URL i pro angličtinu.

Můžeš to zkomprimovat do jedné routy, parametr lang přiřadit přímo k TLD a přeložit si ho na locale filtrovací tabulkou. Nějak takhle (psáno z hlavy):

$router[] = new Route('//domena.<lang>/[<prom1>/][<prom2>/][<prom3>/]', [
	'presenter' => 'Homepage',
	'action' => 'default',
	'lang' => [
		Route::VALUE => 'cs',
		Route::FILTER_TABLE => [
			'cz' => 'cs',
			'com' => 'en',
		],
	],
]);
Michal Hlávka
Člen | 190
+
0
-

No to není úplně pravda ne? Jemu se první routa nemůže matchnout, protože je na jiné doméně. A pokud nechceš přesměrovávat, nastav parametr lang jako persistentní.

kolsi
Člen | 131
+
0
-

Trochu starší téma, ale ať nezakládám zbytečně nové. Lze nějak elegantně vyřešit situaci, kdy chci mít jeden kód na více doménách (např. vývojová a finální) a pro každou doménu potřebuji jiné routování, jinak než:

public static function createRouter()
	if (aktualni_domena == domena1) {
		$router[] = new Route(....)
	} else {
		$router[] = new Route(....)
	}
	return $routeList;
}

Pokud totiž definuji dvě routy najednou, např.

	// router pro domena1
	$router[] = new Route('//[www.][<module>.]domena1.<lang eu>/<presenter>/<action>', [ ....

	// router pro ostatni domeny
	$router[] = new Route('[<lang (cz|eu)>/]<module>/<presenter>/<action>', [ ....

tak na domena1 vše šlape ok, ale při přístupu na jiné doméně jsem okamžitě přesměrován na domena1. Jak je vůbec možné, že se vygeneruje URL podle první routy, když je jiná doména?