Ik heb altijd al gewild om "wildcard mapping" te gebruiken. Dus, om niet rechtstreeks naar asp.net bestanden te linken.
Dus bijvoorbeeld linken naar een mijnsite/bla/nogwat en uiteindelijk mijnsite/default.aspx dit te laten afhandelen. Iets wat in de php-wereld vrij gebruikelijk is met een module genaamd mod_rewrite.
Nu zijn er mogelijkheden om dit binnen asp.net zelf voor elkaar te krijgen, maar uiteindelijk heb ik besloten om dit met een ISAPI module voor IIS op te lossen, en wel met de gratis "Ionic's ISAPI Rewrite Filter": http://cheeso.members.winisp.net/IIRF.aspx
Ik draai het overigens op een testserver met IIS5. De live server gaat IIS6 worden.
Alles heb ik basis geconfigureerd en het werkt goed. Alle paden die ik invoer bijvoorbeeld:
http://server/site/
http://server/site/pagina
http://server/site/pagina/0
Worden door http://server/default.aspx afgehandeld. En uiteraard worden images en stylesheet e.d. ook goed gemapped.
Maar nu heb ik een menu met relatieve links op elke pagina in de site. Die links zien er uit als volgt:
<a href=pagina1>pagina 1</a>
<a href=pagina2>pagina 2</a>
<a href=pagina3>pagina 3</a>
Als ik nu op http://server/site binnenkom, dan linken de links uiteindelijk naar:
http://server/site/pagina1
http://server/site/pagina2
http://server/site/pagina3
En dat is natuurlijk de bedoeling.
Als ik op http://server/site/bla binnenkom, dan linken de links uiteindelijk naar:
http://server/site/bla/pagina1
http://server/site/bla/pagina2
http://server/site/bla/pagina3
En dat is niet de bedoeling! Want ik wil dat ze nog steeds linken naar http://server/site/pagina1
Uiteraard zou ik dit met mijn relatieve paden kunnen oplossen als:
<a href=../pagina1>pagina1</a>
om weer op de goede locatie uit te komen, maar dat doe ik liever niet, en dat hoeft volgens mij ook niet.
Als ik bijvoorbeeld op tweakers.net navigeer naar http://tweakers.net/meuktracker/meukcat/81
Dan mappen de relatieve paden in de linkermenu's nog steeds naar de juiste relatieve locatie, zonder ../../ of iets dergelijks erin.
Uiteindelijk is in mijn geval de browser verantwoordelijk voor het mappen van links (denk ik). Het is dan ook logisch dat als ik in een pagina als site/bla/pagina1 zit, dat alle relatieve pagina's vervolgens linken naar iets als site/bla/pagina1/mijnlink.
Ik heb echter geen flauw idee waarom de browser dat niet doet bij sites als tweakers.net. Is er misschien sprake van 1 of andere header die meegestuurd wordt die dat bepaald?
Ik hoop dat iemand het antwoord weet...
Dus bijvoorbeeld linken naar een mijnsite/bla/nogwat en uiteindelijk mijnsite/default.aspx dit te laten afhandelen. Iets wat in de php-wereld vrij gebruikelijk is met een module genaamd mod_rewrite.
Nu zijn er mogelijkheden om dit binnen asp.net zelf voor elkaar te krijgen, maar uiteindelijk heb ik besloten om dit met een ISAPI module voor IIS op te lossen, en wel met de gratis "Ionic's ISAPI Rewrite Filter": http://cheeso.members.winisp.net/IIRF.aspx
Ik draai het overigens op een testserver met IIS5. De live server gaat IIS6 worden.
Alles heb ik basis geconfigureerd en het werkt goed. Alle paden die ik invoer bijvoorbeeld:
http://server/site/
http://server/site/pagina
http://server/site/pagina/0
Worden door http://server/default.aspx afgehandeld. En uiteraard worden images en stylesheet e.d. ook goed gemapped.
Maar nu heb ik een menu met relatieve links op elke pagina in de site. Die links zien er uit als volgt:
<a href=pagina1>pagina 1</a>
<a href=pagina2>pagina 2</a>
<a href=pagina3>pagina 3</a>
Als ik nu op http://server/site binnenkom, dan linken de links uiteindelijk naar:
http://server/site/pagina1
http://server/site/pagina2
http://server/site/pagina3
En dat is natuurlijk de bedoeling.
Als ik op http://server/site/bla binnenkom, dan linken de links uiteindelijk naar:
http://server/site/bla/pagina1
http://server/site/bla/pagina2
http://server/site/bla/pagina3
En dat is niet de bedoeling! Want ik wil dat ze nog steeds linken naar http://server/site/pagina1
Uiteraard zou ik dit met mijn relatieve paden kunnen oplossen als:
<a href=../pagina1>pagina1</a>
om weer op de goede locatie uit te komen, maar dat doe ik liever niet, en dat hoeft volgens mij ook niet.
Als ik bijvoorbeeld op tweakers.net navigeer naar http://tweakers.net/meuktracker/meukcat/81
Dan mappen de relatieve paden in de linkermenu's nog steeds naar de juiste relatieve locatie, zonder ../../ of iets dergelijks erin.
Uiteindelijk is in mijn geval de browser verantwoordelijk voor het mappen van links (denk ik). Het is dan ook logisch dat als ik in een pagina als site/bla/pagina1 zit, dat alle relatieve pagina's vervolgens linken naar iets als site/bla/pagina1/mijnlink.
Ik heb echter geen flauw idee waarom de browser dat niet doet bij sites als tweakers.net. Is er misschien sprake van 1 of andere header die meegestuurd wordt die dat bepaald?
Ik hoop dat iemand het antwoord weet...