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: apache, ci, codeigniter, config, config.php, httpd.conf, index.php, modrewrite, modulo, mod_rewrite, remover, rewritebase, rewriterule, url.
13 Comments Add your own
Leave a Comment
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
1.
Claudia Farias | Setembro 8, 2009 at 2:26 pm
Cara, já tentei de tudo. Continua montrando página nao encontrada. =T
2.
Fernando Libório | Setembro 8, 2009 at 2:31 pm
Como está seu .htaccess ? Alterou o config.php?
Abraço
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.
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
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
6.
Fernando Libório | Setembro 8, 2009 at 5:32 pm
Seu aplicativo está fisicamente em /var/www/twork ou é um alias?
7.
Claudia Farias | Setembro 8, 2009 at 5:35 pm
Está em /var/www/twork mesmo.
O que eu fiz de errado? rs
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
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
10.
Fernando Libório | Setembro 8, 2009 at 6:05 pm
Blz Então … se der certo, post aqui p/ ajudar outras pessoas.
Abrasss
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.
12.
Fernando Libório | Outubro 1, 2009 at 12:32 am
Obrigado Raphael. E vem mais coisa por ai sobre CI.
Abrasss
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!!