htaccess if else
Hallo,
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:
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 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!
>> Wat ik probeer is wanneer geen van de RewriteRules wordt toegepast, error.php wordt weergegeven.
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.
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.
>> 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?
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?
En wat gebeurt er als je 'ozzie' aanroept?
Geen map, geen bestand en geen index.....
Geen map, geen bestand en geen index.....
Dan moet dus error.php worden aangeroepen. :P
Maar wat doet ie dan?
Aha ... dan had ik het verkeerd begrepen ... ik dacht dat alles naar index.php moest.
En als je het dan zo doet:
RewriteRule !^index$ error.php [L]
En als je het dan zo doet:
RewriteRule !^index$ error.php [L]
Waarom laat je de applicatie zelf niet bepalen of iets een "error" is?
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.
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 geen file Is
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
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
Overigens zijn de RewriteConditions enkel van toepassing op de eerst(volgend)e RewriteRule.
De tweede RewriteRule heeft dus in principe géén RewriteConditions.
De tweede RewriteRule heeft dus in principe géén RewriteConditions.
precies.
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.
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.




