Route a subdoména
- LM
- Člen | 206
Jak je možné vytvořit routu na subdoménu která bude fungovat na jakékoliv doméně?
<?php
$router[] = new Route("//admin.host.com/ ? module=<presenter> & action=<action>", array(
'presenter' => 'Admin:Bulletin',
'action' => 'show',
));
?>
Tohle funguje ale pouze na doméně host.com.
Zkusil jsem:
<?php
$router[] = new Route("//admin.<host>/ ? module=<presenter> & action=<action>", array(
'presenter' => 'Admin:Bulletin',
'action' => 'show',
'host' => NULL,
));
?>
Ale to pak generuje odkazy: admin./?module...
, host je
NULL…
- David Grudl
- Nette Core | 8218
nejlépe asi
$host = '...'; // z konfigu nebo index.php
$router[] = new Route("//admin.$host/ ? module=<presenter> & action=<action>", array(
'presenter' => 'Admin:Bulletin',
'action' => 'show',
));
- kravčo
- Člen | 721
Podľa mňa miešaš dve veci dohromady. „Premenná“ host
je
pre konkrétnu aplikáciu (na konkrétnom serveri) v podstate konštantná.
Preto mi príde nelogické používať zobáky (<host>
),
keďže tými ja chápem premenné aplikácie. Skôr by som to riešil
nejako takto:
<?php
$uri = Environment::getHttpRequest()->getUri();
$host = $uri->getAuthority();
$router[] = new Route("//admin.$host/?module=<presenter>&action=<action>", array(
'presenter' => 'Admin:Bulletin',
'action' => 'show',
));
?>
Problém v tejto implementácii je ten, že aplikácia ako taká nedokáže
vo všeobecnosti zistiť, či má z hodnoty premennej $host
odstrániť domény vyššieho rádu, alebo nie.
pre defaultnú stránku administrátorskej časti – povedzme
http://admin.example.com/
– by táto routa nezbehla, keďže
v premennej $host
sa objaví celá autorita z URI = reťazec
'admin.example.com'
.
Riešením môže byť zameranie na konkrétne názvy subdomén (www, admin) alebo na rád domény (vždy ponechať len druhý rád – takto je to v príklade nižšie), avšak otázkou zostáva čo s localhostom.
<?php
# ponechá len doménu druhého rádu (whatever.example.com -> example.com)
$host = preg_replace ('/^.*?(?=[^.]+\.[^.]+$)/', '', $host);
# alebo ekvivalentne
# $host = preg_replace ('/^.*?([^.]+\.[^.]+)$/', '$1', $host);
?>
Vyriešil niekto iný routovanie na subdomény?
Vyriešil…
Editoval kravco (29. 10. 2008 0:34)
- David Grudl
- Nette Core | 8218
LM napsal(a):
Tím jsem se pokoušel obejít to že regulérní výraz můžu zadat pouze parametru…
Což má ale své opodstatnění – úkolem routy je nejen cestu
naparsovat, ale i vygenerovat. Pokud bych tedy v masce uvedl něco jako
[a-z]*
, generování by nevědělo, co tam vložit.
- LM
- Člen | 206
David Grudl napsal(a):
LM napsal(a):
Tím jsem se pokoušel obejít to že regulérní výraz můžu zadat pouze parametru…
Což má ale své opodstatnění – úkolem routy je nejen cestu naparsovat, ale i vygenerovat. Pokud bych tedy v masce uvedl něco jako
[a-z]*
, generování by nevědělo, co tam vložit.
To vím, ale možná by tam nemuselo vkládat nic (edit. blbost…),
parametry ze kterých má být vygenerováno url se nyní taky přes zadaný
regexp nekontrolují: <id \d+>
můžu předat parametr
id=‚text‘ a vygeneruje se url které pak zpětně už neprojde.
Editoval LM (30. 10. 2008 17:11)