CodeIgniter: Remover index.php da URL

Agosto 12, 2009

Estou iniciando com o CodeIgniter e me deparei com um pequeno problema que aparentemente não chegava nem a ser um problema – remover o index.php da URL. Aparentemente era só criar uma regra no htaccess e a mágica estaria feita … não foi bem assim que aconteceu :)

Resolvi da seguinte forma:

1. Habilitar o ModRewrite no Apache

Abra o httpd.conf e descomente a linha LoadModule rewrite_module modules/mod_rewrite.so e reinicie o apache.

2.  htaccess

Crie um .htaccess na raiz do seu projeto. O arquivo deve estar no mesmo nível da pasta system.

RewriteEngine on
RewriteCond $1 !^(index\.php|system|images)
RewriteRule ^(.*)$ /index.php/$1

Muita atenção com as barras (/). A maioria das dicas e tutoriais que você vai encontrar por ai leva em conta que seu projeto está no document root e não em um alias (diretório virtual). Se você estiver usando um diretório virtual use o RewriteBase para indicar qual a url base de seu projeto e em RewriteRule remova a barra da frente de index.php para indicar que o arquivo não está na raiz do servidor (document root) e sim no diretório virtual.

RewriteEngine on
RewriteBase /meu_projeto/
RewriteCond $1 !^(index\.php|system|images)
RewriteRule ^(.*)$ index.php/$1

3. config.php

Aqui foi onde eu apanhei feito mala velha. Depois de criar a regra no htacess, o modrewrite não funcionava .. não sei bem ainda o por quê, mas encontrei em um fórum que era necessário alterar uma linha do config.php na pasta application.
Altere a linha $config['index_page'] = “index.php” para $config['index_page'] = “”.

Pronto, problema resolvido.

Abraços

Entry Filed under: PHP. Tags: , , , , , , , , , , , , , .

13 Comments Add your own

  • 1. Claudia Farias  |  Setembro 8, 2009 at 2:26 pm

    Cara, já tentei de tudo. Continua montrando página nao encontrada. =T

    Responder
  • 2. Fernando Libório  |  Setembro 8, 2009 at 2:31 pm

    Como está seu .htaccess ? Alterou o config.php?

    Abraço

    Responder
  • 3. Claudia Farias  |  Setembro 8, 2009 at 2:36 pm

    o .htaccess:

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

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

    Alterei o config.php sim. Tentei todas as possibilidades para $config['uri_protocol'] no desespero.

    $config['index_page'] = “”;
    $config['uri_protocol'] = “REQUEST_URI”;

    Ubuntu9.04+Apache2.2+php5.2
    :s

    Obrigada desde já. Abraço.

    Responder
  • 4. Fernando Libório  |  Setembro 8, 2009 at 5:08 pm

    Tenta assim:

    [.htaccess]

    RewriteEngine on
    RewriteBase /twork/
    RewriteCond $1 !^(index\.php|system|images)
    RewriteRule ^(.*)$ index.php/$1

    [config.php]

    $config['index_page'] = “”;
    $config['uri_protocol'] = “AUTO”;

    A url raiz do seu aplicativo é: http://localhost/twork/, correto?

    Abrasss

    Responder
  • 5. Claudia Farias  |  Setembro 8, 2009 at 5:12 pm

    Nada ainda. =T
    A raiz é esta mesmo.

    [Log do Apache]
    [Tue Sep 08 17:11:06 2009] [error] [client 127.0.0.1] File does not exist: /var/www/twork/users, referer: http://localhost/twork/index.php/users/register

    Responder
  • 6. Fernando Libório  |  Setembro 8, 2009 at 5:32 pm

    Seu aplicativo está fisicamente em /var/www/twork ou é um alias?

    Responder
  • 7. Claudia Farias  |  Setembro 8, 2009 at 5:35 pm

    Está em /var/www/twork mesmo.
    O que eu fiz de errado? rs

    Responder
  • 8. Fernando Libório  |  Setembro 8, 2009 at 5:52 pm

    Bom, criei um ambiente aqui parecido com o que você passou nos comentários. Só precisei modificar:

    $config['url_base'] = “http://localhost:8080/test/”
    $config['index_page'] = “”;

    E meu .htaccess ficou assim:

    RewriteEngine on
    RewriteBase /test/
    RewriteCond $1 !^(index\.php|system|images)
    RewriteRule ^site/(.*)$ index.php/$1

    Coloquei o ^site/ só pra testar … a url fica assim: http://localhost:8080/test/site aponta para http://localhost:8080/test/index.php

    Responder
  • 9. Claudia Farias  |  Setembro 8, 2009 at 6:02 pm

    Entendi, Fernando.
    Ainda não está trabalhando aqui. Mas vou ficar tentando. Te aviso quando der certo.
    Obrigada e desculpa se te tirei de tempo.
    Abraço ;)

    Responder
  • 10. Fernando Libório  |  Setembro 8, 2009 at 6:05 pm

    Blz Então … se der certo, post aqui p/ ajudar outras pessoas.

    Abrasss

    Responder
  • 11. Raphael  |  Setembro 30, 2009 at 3:11 pm

    Cara,
    Muito obrigado, depois de muito procurar o seu foi perfeito.
    Somente o necessário, muito pontual.

    Parabéns.

    Responder
    • 12. Fernando Libório  |  Outubro 1, 2009 at 12:32 am

      Obrigado Raphael. E vem mais coisa por ai sobre CI.

      Abrasss

      Responder
  • 13. Evandr  |  Novembro 14, 2009 at 11:34 pm

    Cara deu certo sem ter que mudar o config, mas quando quis editar ele não entra no admin e depois perdeu a configuração.

    mas pela primeira vez eu vi os links funcionando sem o maldito do INDEX.PHP.

    Voltei a estaca zero, mas agora sem que tem solução.

    Tem alguma forma de falar no htacces quando for o admin ele desconsiderar o desvio e manter o css original?

    Valew mesmo!!

    Responder

Leave a Comment

Required

Required, hidden

Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


 

Agosto 2009
S T Q Q S S D
« Jun   Set »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

Arquivos

Tópicos recentes

Tags

Addfont apache Aplicações audio bash Carreira desabilitado desativado Desktop diminuir Documento emprego Encoding Firefox FPDF Gerenciador Google GTK+ HDA iconv iReport Jasper jasperserver Java Linux MakeFont mudo mysql Partição PDF Perl PHP postgres procedure redimensionar Relatorio script shell shrink SLACKWARE som ttf2pt1 vaga Vista Windows

Categorias

Blogroll