Codeigniter: Ta bort index.php från url:er – Inklusive från form_open()

January 10th, 2014 | Posted by admin in Tips | Webbutveckling

Codeigniter är ett bra framework för php. Men det finns ett jobbigt moment med detta framework, och det är att index.php inte automatiskt tas bort från url:er trots att man oftast inte vill ha det i sina projekt.

I user guiden rekommenderar de att man använder .htaccess-filen och modrewrite för att ta bort index.php. De rekommenderar följande bit modrewrite kod:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Stycket innebär att index.php plockas bort men man får även normal tillgång till index.php-filen, en mapp som heter images och robots.txt filen.

Jag hittade ett modrewrite-stycke på nätet som tar bättre hänsyn till vad en användare begär i sina url:er:


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

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]


ErrorDocument 404 /index.php

I det här fallet kommer index.php att tas bort, men man har även normal tillgång till alla filer och mappar och inte bara till de filer och mappar som exklusivt är namngivna som i första fallet.

Sen finns det ett irriterande special fall som förutom modrewrite kräver en extra åtgärd. Det är när man använder form_open-metoden som ingår i Form Helper som är specialfallet. När man använder denna metod för att ange den öppnande

-taggen för ett formulär och sedan använder formuläret och skickar iväg det så ser man att index.php återvänder i url:erna på den resulterande sidan, trots att man använder en htaccess-fil för att ta bort index.php. Lösningen här är enkel men inte helt uppenbar. Öppna config.php i config-mappen. Omkring rad 30 ser du att det står:

$config[‘index_page’] = ‘index.php’;

Men som det står i den beskrivande texten för denna inställning så ska denna inställning lämnas blank när man använder en htaccess-fil för att ta bort index.php. Så det är bara att ändra denna till:

$config[‘index_page’] = ”;

Nu ska index.php vara borta i alla url:er överallt när man använder Codeigniter.

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

Leave a Reply

Your email address will not be published. Required fields are marked *