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.

Det finns en del anledningar till att lösenordsskydda en webbsida, till exempel att man vill ha en privatsida eller att man håller på att utveckla sidan och vill hålla den privat under utvecklingstiden. Om man har en Apache-server så är det väldigt smidigt att använda htpasswd och htaccess. Så här gör man.

1. Skapa en fil som heter .htaccess och en som heter .htpasswd. Om Windows vägrar skapa dessa filer så googla upp redan färdigskapade sådana.
2. Kopiera in följande text stycke i .htaccess-filen:

AuthName “En titel”
AuthType Basic
AuthUserFile /fullständig/sökväg/till/.htpasswd
Require valid-user

3. Ändra “En titel” till en egen titel. Låt citattecknena vara kvar.
4. Ändra /fullständig/sökväg/till/.htpasswd till den fullständiga sökvägen till där .htpasswd kommer ligga. OBS det måste vara den fullständiga sökvägen.
5. Ladda upp .htaccess-filen till den mappen (och undermapper) som du vill lösenordsskydda. I de flesta fall borde detta vara root-mappen för din webbsida. Men du kan skydda bara undermappar om du vill.
6. Googla upp en .htpasswd-generator. Till exempel denna.
7. Skriv in ett användarnamn och ett lösenord och generera lösenordet.
8. Kopiera in hela den genererade text-biten till din .htpasswd fil.
9. Ladda upp .htpasswd-filen till samma mapp där .htaccess-filen ligger.

Nu är det bara att ladda om sidan så kommer det poppa upp en inloggningsruta. Klart!

Ändra förinställd teckenkodning

August 13th, 2009 | Posted by admin in Server - (0 Comments)

Ett annat problem vi hade med den nya sidan vi köpt var teckenkodningen på sidan. Teckenkodningen kan sättas både i HTTP-headern och i utvecklingsfilerna. Om teckenkodningen är satt på båda ställen så är det teckenkodningen i HTTP-headern som kommer användas av webbläsare. I vårt fall är teckenkodningen i HTTP-headern satt till UTF-8 men sidan använder ISO-8859-1. Denna konflikt ledde i slutändan till att bokstäverna åäö ersattes med nonsenstecken.

Men om man har tillgång till .htaccess filen så finns det ett enkelt sätt att komma runt det förinställda värdet i HTTP-headern. Allt man behöver göra är att lägga in följande i .htaccess-filen så kommer HTTP-headern att sättas till önskad teckenkodning:

AddDefaultCharset ISO-8859-1