CodeIgniter – removendo o index.php e removendo o www da url. (url canonica)

Boa tarde a todos!

Dessa vez irei falar sobre remover o arquivo index.php de nossa aplicação no CodeIgniter, e também fixar o nosso domínio para um só! Ou seja uma tática SEO para não ficar com múltiplas URLS.

Primeiro vamos falar para o nosso CodeIgniter que a página index.php não deve mais existir! para isso devemos editar o arquivo config.php dentro da nossa pasta application.
Muito fácil, basta remover o conteudo da varíavel $config[‘index_page’] ficando igual o código abaixo.

/*
      |--------------------------------------------------------------------------
      | Index File
      |--------------------------------------------------------------------------
      |
      | Typically this will be your index.php file, unless you've renamed it to
      | something else. If you are using mod_rewrite to remove the page set this
      | variable so that it is blank.
      |
     */
    $config['index_page'] = "";

Agora vamos criar o nosso arquivo .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#Remove o acesso a pasta system
RewriteCond %{REQUEST_URI} ^system.*

#Redireciona /index.php/nomedocontroller/ to /nomedocontroller/função/
RewriteRule ^(.*)$ index.php/$1 [L]

#se o arquivo não existir (um css ou javascript por exemplo)
#ele redireciona para o index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

#aqui fazemos o redirecionamento 301 de uma url.com.br para www.url.com.br
RewriteCond %{HTTP_HOST} ^(seusite\.com\.br)(:80)? [NC]
RewriteRule ^(.*) http://www.seusite.com.br/$1 [R=301,L]
</IfModule>
<IfModule !mod_rewrite.c>
#caso o mod_rewrite não esteja habilitado ele redireciona todo erro 404
#para o index.php ainda funcionando
ErrorDocument 404 /index.php
</IfModule>

Pronto!
Agora você terá sua URL mais amigável e alem de tudo otimizada para os buscadores!

Para veríficar um exemplo:
acesse meu site assim: http://williamrufino.com.br e você será redirecionado para http://williamrufino.com.br
Fonte: http://codeigniter.com/
www.mestreseo.com.br

12 Comentários

  1. @davimmOficialsays:

    Aee.. Até que enfim algum site explicou e deu os passos certos para retirar o index.php do CodeIgniter!
    Muito Obrigado!!

    • Que isso cara, bom saber que o post te ajudou!
      Se tiver mais dúvidas sobre o Codeigniter ficarei feliz em ajudar, se tiver ao meu alcance!

  2. Matheussays:

    Realmente o unico Site que funciona.

  3. Ola amigo gostei do post você está de parabéns, estou começando a estudar o codeigniter e gostaria de uma dica sua, onde posso em contar um bom material em português para estudar, se poder mim ajudar agradeço.

  4. Marlonsays:

    Olá, estou começando a utilizar o CI agora e estou com um problema. Configurei o .htaccess do jeito que voce ensinou, mas nao está funcionando. Ex: http://www.meusite.com.br/teste não funciona, mas quando eu coloco http://www.meusite.com.br/index.php/teste aí funciona. Ou seja, o .htacces não está funcionando, tanto que eu o retiro e mesmo assim o site nao funciona como default: http://www.meusite.com.br/index.php/qualquerpagina.
    Utilizo o UOLHOST. Liguei lá e o pessoal disse que o modulo rewrite deles estão funcionando corretamente. Gostaria de saber como resolver isto. Muito obrigado e ótimo post

  5. Ola william no meu site não consegui deixar a url amigável, fiz tudo que era pra fazer, coloquei htaccess na pasta application, retirei ‘index.php’ do config.php, no servidor que está instalado o site ele fala que para colocar url amigável tem que colocar Rewrite base / eu fiz isso tambem mas nao deu, um exemplo acima é o site no formulario de contato da os erros em outra pagina em branco, por causa do index.php que atrapalha o caminho.

    • no uol você precisa mudar a pasta vars.php
      coloque esse codigo abaixo que vai dar certo.

      = 7;

      /**
      * Test if the current browser runs on a mobile device (smart phone, tablet, etc.)
      *
      * @return bool true|false
      */
      function wp_is_mobile() {
      static $is_mobile;

      if ( isset($is_mobile) )
      return $is_mobile;

      if ( empty($_SERVER[‘HTTP_USER_AGENT’]) ) {
      $is_mobile = false;
      } elseif ( strpos($_SERVER[‘HTTP_USER_AGENT’], ‘Mobile’) !== false // many mobile devices (all iPhone, iPad, etc.)
      || strpos($_SERVER[‘HTTP_USER_AGENT’], ‘Android’) !== false
      || strpos($_SERVER[‘HTTP_USER_AGENT’], ‘Silk/’) !== false
      || strpos($_SERVER[‘HTTP_USER_AGENT’], ‘Kindle’) !== false
      || strpos($_SERVER[‘HTTP_USER_AGENT’], ‘BlackBerry’) !== false
      || strpos($_SERVER[‘HTTP_USER_AGENT’], ‘Opera Mini’) !== false
      || strpos($_SERVER[‘HTTP_USER_AGENT’], ‘Opera Mobi’) !== false ) {
      $is_mobile = true;
      } else {
      $is_mobile = false;
      }

      return $is_mobile;
      }

  6. Yuri Fontellasays:

    Boa tarde Rufino, será que com o .htaccess teria alguma chance de remover o /index.php/controller/function… e deixar apenas a variável. Tenho uma função que pega o último segmento da url para trazer dados…

    Ex: meusistema/empresa/perfil/meunome

    Teria como deixar assim com o .htacess:

    Ex: meusistema/meunome??

    Obrigado.

Deixe um comentário

Por favor, seja educado. Seu e-mail não será publicado e os campos obrigatórios estão marcados.