Codeigniter

logo van Wijhe Consultancy

14-12-2017
Eigen artikelen

afbeelding Codeigniter

htaccess voor Codeigniter

 

Codeigniter werkt vanuit een file index.php waarna de de controllers en functies aangeroepen worden.
Als je kijkt naar zo's URL ziet deze er niet vriendelijke uit.

 

Voorbeeld van onvriendelijke URL
http://codeigniter.vanwijhecons.nl/index.php/welcome 

 

Wat je zou willen hebben is het volgende:

Voorbeeld van gewenste URL
http://codeigniter.vanwijhecons.nl/welcome 

 

Kan dat?
Ja, dat kan.

We gaan hier gebruik maken van het volgende mechanisme.

 

.htaccess


De werking ervan is al gepubliceerd in het volgende artikel:
http://portaal.vanwijhecons.nl/htaccess-op-een-windows-webserver

 

 

Eerst het gehele voorbeeld


  .htaccess / ht.acl  
<IfModule mod_rewrite.c>

	RewriteEngine On

	RewriteBase /ci213/

	RewriteCond %{REQUEST_URI} ^system.* 
	RewriteRule ^(.*)$ /index.php/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]
  
	RewriteCond $1 !^(index\.php|system|application|robots\.txt)

	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d

	RewriteRule ^(.*)$ index.php/$1 [L,QSA]

</IfModule>

<IfModule !mod_rewrite.c>
   
    ErrorDocument 404 /index.php
	
</IfModule>

 

Deze file zorgt ervoor dat alle URL invoer ontdaan wordt van de tekst

index.php

maar er wel naar toe wordt gestuurd.

 

 

Nu de uitleg per onderdeel

 

  IfModule mod_rewrite  
<IfModule mod_rewrite.c>

	// Codes
	
</IfModule>

 

Deze beide regels zorgen ervoor dat als de module mod_rewirite niet geladen is deze file geen fout melding geeft.

 

  RewriteEngine  
    
	RewriteEngine On    

 

Deze regel zet het mechanisme in werking (bij Apache is dit niet standaard).

 

  RewriteBase  
   
	RewriteBase /ci213/    

 

Deze regel zorgt ervoor dat het htaccess mechanisme weet waarvanuit hij moet gaan werken.
Standaard wil het rewrite mechanisme vanuit de root van de website werken.
Als het Codeigniter in een sub directorie hebt geplaatst, dien je hier de naam van de sub directorie op te geven.
In dit geval de sub directorie ci213 .

 

  RewriteCond RewriteRule  
    
	RewriteCond %{REQUEST_URI} ^system.* 
	RewriteRule ^(.*)$ /index.php/$1 [L]

 

Deze regel zorgt ervoor dat de directorie system niet direct benaderbaar is.
En geeft zelfs de mogelijkheid tot het maken van een System.php controller.

 

  RewriteCond RewriteRule  
    
	RewriteCond %{REQUEST_URI} ^application.* 
	RewriteRule ^(.*)$ /index.php/$1 [L]

 

Deze regel zorgt ervoor dat de directorie application niet direct benaderbaar is.
Deze is standaard voor de web applicatie zelf.

 

  RewriteCond  
   
	RewriteCond $1 !^(index\.php|system|robots\.txt)

 

Deze regel zorgt ervoor dat alles wat naar index.php of de map system of robots.txt gaat ook daadwerkelijk bij index.php uitkomt.

 

  RewriteCond  
   
	RewriteCond %{REQUEST_FILENAME} !-f

 

Deze regel zorgt ervoor dat alles wat geen file of bestand is naar index.php gestuurd wordt.
Dit zorgt ervoor dat pagina geladen worden ook al missen er bepaalde zaken.

 

  RewriteCond  
   
	RewriteCond %{REQUEST_FILENAME} !-d

 

De regel zorgt ervoor dat er geen url met slashes aan het eind verschijnen.
Hierdoor wordt verkomen dat er meerdere URL komen met gelijke inhoud.

De URL:

http://codeigniter.vanwijhecons.nl/een_url_link

Is niet gelijk aan de URL:

http://codeigniter.vanwijhecons.nl/een_url_link/

 

 

  RewriteRule  
   
	RewriteRule ^(.*)$ index.php/$1 [L,QSA]

 

De laatste regel.
Deze zorgt ervoor voor de daadwerkelijk uitvoer.
Alles wat het voorgaande hem geeft, stuurt hij naar index.php file.

 

 

Veel programmeer plezier ermee.


Tot ziens,

Ubel Jan van Wijhe
van Wijhe Consultancy
E-mail naarinfo@vanwijhecons.nl