Všechna URL bez lomítka na konci

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

Ahoj, jak udělat, aby se jakékoliv URL v celé aplikaci kanonizovaly:

  1. vždy na variantu bez lomítka na konci,
  2. vždy na variantu s lomítkem na konci?

A nikoliv občas s lomítkem a občas bez lomítka, jak to dělá Nette standardně.

Prosím nechci tady žádné debaty na téma, jestli je stávající řešení správně a proč. Já ho třeba považuji za zcela špatné, ale diskuze na toto téma by nikam nevedla.

Potřebuju prostě řešení, jak zajistit všechna URL na webu jednotná a konzistentní. Ideálně, pokud by Nette nabízelo snadný přepínač ve smyslu „trailingSlash = ALWAYS|NEVER|AUTO“

Našel jsem, že se to tu ve fóru už vícekrát řešilo, ale nikde jsem nenašel rozumné řešení.

Díky, Honza

Honza Marek
Člen | 1664
+
0
-

Jedině si podědit třídu Route a v metodě constructUrl si opravit výstup z parent::constructUrl. Nějak hezčeji to bohužel nejde.

Jan Tvrdík
Nette guru | 2595
+
0
-

Nešly by použít volitelné sekvence?

$route = new Route('[<presenter>[/<action>[/<id>]]]', array(
   'presenter' => 'Dashboard',
   'action' => 'default',
));

$route = new Route('[<presenter>/[<action>/[<id>/]]]', array(
   'presenter' => 'Dashboard',
   'action' => 'default',
));
Vyki
Člen | 388
+
0
-

Přes volitelné sekvence je to nejlepší. Stačí každý další parametr napsat jako <param>[/<param2>]. To znamená že lomítko se za param vloží až společně s param2. Bez lomítka by to bylo <param>/[<param2>/]

Editoval Vyki (18. 7. 2010 21:08)

Tharos
Člen | 1030
+
0
-

Ano, ale to neřeší tu kanonizaci. Respektive požadavek na „presenter/view/“ povede na 404, namísto toho, aby byl přesměrován (ideálně přes 301) na „presenter/view“. Podle mě to až tak moc nevadí, protože aplikace ten odkaz s lomítkem na konci nikdy nevygeneruje, ale sám jsem se setkal se situací, kdy po mně přesně tuto kanonizaci klient chtěl, protože podle onoho klienta není až tak raritní, že se návštěvník snaží dostat na webu o úroveň výš tím, že umaže kousek url. Tak babo raď, sám nevím, jestli tohle návštěvníci reálně dělají :).

Jinak, jak psal Honza, řešit se to dá vlastním routerem. Já jsem to tak onehdy vyřešil.

Editoval Tharos (18. 7. 2010 22:34)

Proki
Člen | 66
+
0
-

Řeším to také přes volitelné sekvence, ale nezdá se mi, že by to neřešilo kanonizaci. Sám jsem to právě teď odzkoušel na jednom ze svých projektů a vždy se mi URL přesměrovala tak, aby byla kanonická (např. u mě obsahovala koncové lomítko)

Tharos
Člen | 1030
+
0
-

Tak to jsou mi věci, odvolávám tímto tedy příspěvek #5. :)

Vyki
Člen | 388
+
0
-

Mohu potvrdit, že to s kanonizací skutečně žádný problém nemá. V pořádku to přesměrovává.

David Grudl
Nette Core | 8129
+
0
-

jantichy napsal(a):

A nikoliv občas s lomítkem a občas bez lomítka, jak to dělá Nette standardně.

Nette to dělá přesně tak, jak mu řekneš.

Prosím nechci tady žádné debaty na téma, jestli je stávající řešení správně a proč. Já ho třeba považuji za zcela špatné, ale diskuze na toto téma by nikam nevedla.

Silná slova chtějí argumenty!

jantichy
Člen | 24
+
0
-

Nette to dělá přesně tak, jak mu řekneš.

Výše uvedené volitelné sekvence vše vyřešily, předtím jsem o nich nevěděl, díky.

Silná slova chtějí argumenty!

A to je právě to, do čeho se mi nechce, už jsem to v minulosti asi dvakrát absolvoval v SEO konferenci a opravdu to nikam nevedlo. ;)

Patrik Votoček
Člen | 2221
+
0
-

Jen nahodím článeček přímo od Google http://google-cz.blogspot.com/…ebo-bez.html