htaccess rewrite optionele variabelen

  • Hallo allemaal,


    Ik heb momenteel de volgende htaccess code:


    Nu zit ik met een lastig probleem, de tweede variabele die in de url terechtkomt wordt niet doorgegeven.


    domein.com/mailbox werkt
    domein.com/mailbox/1 werkt
    domein.com/mailbox/1/favourites geeft geen verschil met domein.com/mailbox/1


    Nochtans werkt domein.com/mailbox.php?p=1&cat=favourites wel...


    Weet iemand wat ik hier fout doe?


    Alvast bedankt!


    Willem

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Waarschijnlijk is je RewriteRule niet expliciet genoeg.


    /? wil zeggen "optionele slash" denk ik?
    (.*) wil zeggen "match (en vang) een subpatroon van 0f of meer karakters"


    Dit is wellicht te vrijblijvend in die zin dat de match sneller wordt afgerond dan je eigenlijk wilt.


    Beter is wellicht een set (hele) expliciete RewriteRules die van specifiek naar algemeen gaan.
    Eerst maak je dus een ReWriteRule die controleert op "mailbox/(.*)/(.*)", dan een die controleert op "mailbox/(.*)" en tot slot een die controleert op simpelweg "mailbox".


    Het bovenstaande werkt altijd, maar persoonlijk zou ik dit anders aanpakken. Ik zou alles van de vorm mailbox/(.*) doorsturen naar een script, alwaar je verder uitpluist wat die (.*) dan verder inhoudt en bepaalt wat je gaat doen. Je hebt dan aan één RewriteRule genoeg, maar je moet dan dus wat meer code schrijven. Beide methoden hebben voor- en nadelen.

  • Wel als je meer van dit soort pagina's hebt, anders neemt het aantal rewriterules nogal snel toe.


    Maar als quickfix ga gewoon voor de eerste variant (maak aparte, expliciete rules).


    Mijn alternatieve oplossing voert wellicht wat ver voor wat je op dit moment probeert te bereiken.

  • Ik heb het volgende, bekijk het maar is. Is gewoon met PHP ;)
    https://github.com/Ezdesigneu/modrewrite

    Neeeeeeeeeeeeeeeeeeeeeeeeeeeee :).


    Waarom doet iedereen altijd het volgende:

    Bash
    RewriteRule ^(.*)/$ index.php?route=$1 [L]

    Hiermee "reserveer" je op voorhand expliciet $_GET['route']. Dat is helemaal niet nodig. Je kunt gewoon alles doorsturen naar index.php, en dan je REQUEST_URI ontleden met behulp van parse_url(). Je hoeft hiervoor helemaal niets in $_GET te stoppen.


    Ik vind het wel interessant hoe je via die .ini files (en de verwerking ervan) een soort van tweedeling kunt maken tussen wat "URL" is en wat "variable" is, maar de uiteindelijke URL moet uniek zijn, dus aan die "slug" zou je ook een soort van pagina-type kunnen hangen ("news") met bijbehorende properties (o.a. "news id").


    Ik denk dat je hier wel iets werkends mee kan maken, maar sommige dingen zouden gerefactored moeten worden en andere dingen zou ik echt aanpassen (omdat ze niet helemaal kloppen - een van de eerste dingen die ik zou introduceren is een autoloader). Ik denk ook dat ik snel bepaalde zaken zou missen (zie hieronder).


    Het probleem, of liever gezegd, de uitdaging wanneer je met dit soort functionaliteit aan de slag gaat is dat je een aantal zaken tegelijkertijd moet gaan regelen.


    Denk bijvoorbeeld aan:
    - authorisatie (gebruikersbeheer, rechten, rollen)
    - een intern link systeem waarbij links blijven kloppen als URLs veranderen (dit wordt nog wel eens vergeten)
    - sitestructuur (waarbinnen je authorisatie kunt toepassen)
    - flexibiliteit van het uiterlijk van je uiteindelijke pagina (denk aan het kunnen wijzigen van het hoofd-template, het dynamisch toevoegen van CSS, JavaScript of inline JavaScript)
    en last but not least
    - het gemak waarmee je nieuwe functionaliteit kunt ontwikkelen


    @Ferhat.Remory als je een keer notities wilt vergelijken, lijkt me interessant.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!