htaccess if else
Ik ben op zoek naar een manier waarop ik in htaccess een if else structuur kan opzetten.
Wat ik probeer is wanneer geen van de RewriteRules wordt toegepast, error.php wordt weergegeven.
Dit is wat ik nu heb:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index$ index.php [L]
RewriteRule ^(.*)$ error.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^index$ index.php [L]
RewriteRule ^(.*)$ error.php [L]
Ik dacht dat wanneer "index" voldoet aan de RewriteRule, daarna niet verder wordt gekeken vanwege de L flag. Dit is echter niet het geval.
Ziet iemand de fout / wat ik moet doen om dit werkend te krijgen?
Alvast bedankt!
Ik snap 'm niet. Die laatste regel hoort daar toch niet?
Als het geen bestand of directory is, dan gaat ie naar index.php, en als het wel een bestand of directory is laat ie die dus zien. Meer keuzes heb je niet, dus die error.php kan ook niet getriggerd worden.
Ik snap niet wat je wil bereiken.
Als het een bestaand bestand of mapje is, moet 'ie daar naartoe gaan, is het /index, dan moet 'ie naar index.php gaan, is het iets anders, dan moet 'ie naar error.php gaan.
Het is geen bestand ... het is geen map => index.php
Het is wel een bestand of map => toon bestand of map
Iets anders is er niet, en dus is je error.php overbodig.
Snap je?
Geen map, geen bestand en geen index.....
Dan moet dus error.php worden aangeroepen. :P
Maar wat doet ie dan?
En als je het dan zo doet:
RewriteRule !^index$ error.php [L]
Oftewel, stuur alles door naar index.php, en inspecteer daar $_SERVER['REQUEST_URI'].
Als je dadelijk besluit dat andere pagina's ook toegankelijk moeten zijn, moet je je mogelijk opnieuw in allerlei bochten wringen en zul je hoogstwaarschijnlijk ook je .htaccess bestand opnieuw moeten aanpassen.
Last but not least creëer je nu een tweede "ingang" in je applicatie (error.php). Straks heb je tig van dit soort pagina's. Mogelijk hebben deze alle includes en/of een zekere layout. Wanneer je hier verschillende standalone bestanden voor hebt dan dupliceer je het werk voor het serveren van die (web)pagina's. Althans, ik ga er vanuit dat je uiteindelijk volledige (en kloppende) HTML-documenten uitspuugt?
Anyhoo, zorg gewoon dat je één voordeur hebt in je applicatie en niet allerlei zij- en achterdeuren.
Als het ook geen map Is
Dan herschrijf je iets dat begint met index en daarachter niets tot index.php
De rest zou altijd naar error.php gaan
De tweede RewriteRule heeft dus in principe géén RewriteConditions.
dus alleen als /index/ niet bestaat als map, dan kom je in index.php uit.
al het andere zou dus (ook als het wel bestaat) uit moeten komen in de error-pagina
---
Veel handiger is het, om alles wat niet bestaat naar index.php te leiden, en al daar uit te zoeken wat er moet gebeuren.
Misschien zelfs alle direct aangeroepen php files naar index.php te sturen.
Zelf zet ik alle php files buiten de document root behalve index.php
Die file zoekt uit wat er in de url stond en of hij dat begrijpt.
bijvoorbeeld /producten/list
zal in index.php leiden tot het aanroepen van de producten-control class.
Die zoekt vervolgens wat de volgende term in de url is.(list)
En dan zal hij aan de gang gaan om een lijst te tonen.
Staat er edit/12 dan zal hij de info van product 12 verzamelen en een edit-scherm tonen.
zo heb je altijd een zelfde soort ingang en kan de controller in kwestie zelf de rest van de url uitpluizen.
Dat voorkomt dat je in .htaccess gaat veronderstellen dat een url bestaat uit een string, slash, string, slash getal
danwel met een brei van 300 ondoorgrondelijke rewrite rules komt te zitten waarbij regel 39 en 153 strijdig blijken.