Door
jeroen germers
op 11-07-2015 13:58
gewijzigd op 11-07-2015 15:51
1.013 views
Hallo Allemaal,
Ik ben druk bezig om me eindelijk is te verdiepen in mod rewrite.
Nou weet ik er vrij weinig vanaf, maar heb ik het wel voor elkaar gekregen om het grotendeels aan de praat te krijgen.
ja dat had ik al verwacht dat het daaraan zal liggen, maar der wordt toch echt 2 verschillende dingen geladen?
Het zal vast en zeker wel iets simpels zijn, maar zou je mij een voorbeeldje kunnen geven hoe ik dat het beste kan controleren?
Apache ziet slechts de URL /foo/bar.html maar kan alleen daaruit niet zelfstandig afleiden of daarmee &product=bar of &cat=bar wordt bedoeld. Je hebt dus een ander mechanisme nodig dat een onderscheid kan maken tussen een product en een categorie.
Daar moet je een ontwerpbeslissing nemen: wáárin verschilt een product van een categorie? Waaraan kun je beide herkennen?
Wat ik zelf bijvoorbeeld wel eens doen, is de extensie alleen gebruiken voor een product. Dan krijg je zoiets:
• /foo/bar/ is een categorie;
• /foo/bar.html is een product.
Het kan misschien ook helpen dat je een [L] achter elke rule zet. Deze flag geeft aan dat als er een match wordt gevonden, deze op moet houden met het herschrijven.
Een nadeel van het definiëren van vele RewriteRules is dat de volgorde van de rules steeds belangrijker wordt naarmate deze (.htaccess - althans, ik neem aan dat je dat hier regelt) lijst groeit.
Daarnaast stop je hiermee routing-logica in een apart bestand wat je elke keer aan moet passen als hier iets in verandert. Dat is nogal onhandig in het beheer.
Het lijkt mij een veel beter idee om deze routinglogica te verplaatsen naar je PHP-code. Die kun je dan daar (mogelijk via een interface) aansturen, in plaats van dat je loopt te prutten in een .htaccess bestand die mogelijk je hele site onderuit haalt als hier een fout in zit.
De crux daarbij is dat je alles doorstuurt naar één bestand, bijvoorbeeld index.php (EDIT: waar vervolgens bepaald wordt welke pagina uiteindelijk geladen moet worden). In dit topic staan pointers voor deze aanpak. Het opzetten kost enige moeite, maar daar kun je daarna de vruchten van plukken. Je hoeft dan in ieder geval nooit meer in je .htaccess bestand te zijn om dingen te wijzigen en is de weg open om dit uiteindelijk te automatiseren en op den duur in beheerschermen te regelen.
Het hangt natuurlijk af van een aantal zaken of deze aanpak de moeite loont. Zoals:
- gaat je site nog verder groeien
- hoe lang bestaat je site nog
- is er tijd/geld om deze wijziging door te voeren
etc.
Ok het is dus inderdaad het probleem met dezelfde rewrite rules.
Nu heb ik geen zin om php de rewrite te laten doen, wat is het nut van een .htaccess die ervoor bedoeld is als je alsnog php alles laat redirecten.
Dus ik ga het heel simpel oplossen, doormiddel van de linkjes te veranderen op de pagina's en voeg het tevens toe aan de rewrite rules, heb dit even getest en werkt prima, geen extra script voor nodig.
Het kan misschien ook helpen dat je een [L] achter elke rule zet. Deze flag geeft aan dat als er een match wordt gevonden, deze op moet houden met het herschrijven.
Dit had ik al op verschillende manieren geprobeerd, en werkt niet.
wat is het nut van een .htaccess die ervoor bedoeld is als je alsnog php alles laat redirecten.
Het instrueert je webserver hoe je op een globale wijze omgaat met requests. Daarna heb je in PHP de flexibiliteit om hier alsnog een eigen invulling aan te geven.
Dit kan heel simpel als je dit wilt en er hoeft dan trouwens helemaal geen redirect aan te pas te komen - PHP besluit welke code er geladen en uitgevoerd dient te worden, dit is iets compleet anders dan een redirect naar een andere locatie.
Deze werkwijze is helemaal niet vreemd en wordt vrij breed toegepast ook al lijkt de meerwaarde in eerste oogopslag minimaal.
Het op voorhand afschrijven van een oplossingsrichting simpelweg omdat je iets niet begrijpt of er niet direct het nut van inziet (meestal omdat je het niet begrijpt) getuigt van een weinig onderzoekende houding.
Ik zou zeggen: kijk eens naar het PHP framework Slim 2.. Alles gaat via 1 bestand en je kan heel makkelijk routes maken en de bijhorende content tonen. Uiteraard met SEO-vriendelijke URLs.
Het op voorhand afschrijven van een oplossingsrichting simpelweg omdat je iets niet begrijpt of er niet direct het nut van inziet (meestal omdat je het niet begrijpt) getuigt van een weinig onderzoekende houding.
Ik schrijf het niet af, het lijkt mij ook erg handig om in de toekomst te gebruiken.
Op dit moment ben ik bezig met mod rewrite, dat php veel kan dat weet ik, maar ik wou een simpele oplossing icm met mod rewrite.
Aangezien ik toch de linkjes moest aanpassen ivm mod rewrite was het voor mij dus veel makkelijker om gewoon een toevoeging erbij te plaatsen.
"weinig onderzoekende houding"
Nee absoluut niet, ik heb het bekeken, en heb er verder op na gezocht.
In dit geval is die oplossing omslachtiger dan een toevoeging plaatsen.
Het gaat hier immers om een kleine site met een paar linkjes.