Como remover “index.php” no caminho do codeigniter

Respostas:

90

Se você estiver usando o Apache, coloque um arquivo .htaccess em seu diretório raiz da web contendo o seguinte:

RewriteEngine on
RewriteCond $1 !^(index\.php|[Javascript / CSS / Image root Folder name(s)]|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Outra boa versão está localizada aqui:

http://snipplr.com/view/5966/codeigniter-htaccess/

Sean Vieira
fonte
2
+1 para o link! Embora tive que ajustar um pouco. consegui com isso -> RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule ^ (. *) $ index.php / $ 1 [QSA, L]
OrangeRind
por algum motivo, tive que adicionar uma barra ao início do RewriteCond. RewriteCond $1 !^\/(index\.php|assets|robots\.txt)
Henry
Por alguma razão, se você tiver index.php na URL, ele não é realmente removido, permanece lá e continua funcionando.
CMCDragonkai
1
Usei todas as combinações possíveis e ainda não está funcionando para mim !!!!! Como você fez isto funcionar??
Roshdy
Sua instalação do Apache precisa ser configurada para verificar os arquivos .htaccess - certifique-se de que seja esse o caso.
Sean Vieira
60

Tive alguns grandes problemas ao remover o index.php. Como regra geral, o .htaccess abaixo foi testado em vários servidores e geralmente funciona:

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

<Files "index.php">
AcceptPathInfo On
</Files>  

Se você não tiver sorte com isso, o próximo passo é ajustar seu arquivo de configuração. Experimente alguns dos outros protocolos de URI, por exemplo

| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO

   $config['uri_protocol']  = 'ORIG_PATH_INFO';

Se você ainda não está tendo sorte, tente alterar a regra de reescrita para incluir sua subpasta. Isso costuma ser um problema se você usar um URL temporário em um servidor de desenvolvimento etc:

RewriteRule ^(.*)$ /subofolder1/subfolder2/index.php/$1 [L]  

Basta brincar com essas opções, uma deve funcionar. Além disso, certifique-se de que seu arquivo de índice esteja definido como:

$config['index_page'] = '';

Boa sorte!

jimbo2087
fonte
Achei que seu primeiro código aqui fosse a solução para mim, mas na verdade ele está apenas enviando qualquer url como domain / * para domain / index.php, não está enviando domain / welcome to the welcome controller. estava animado por um segundo então. tentando as outras sugestões agora.
jsky
31

Tenha o arquivo.htaccess no diretório raiz do aplicativo, junto com o arquivo index.php. (Verifique se a extensão htaccess está correta, Bz htaccess.txt não funcionou para mim.)

E adicione as seguintes regras ao arquivo .htaccess,

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

Em seguida, encontre a seguinte linha em seu arquivo application / config / config.php

$config['index_page'] = 'index.php';

Defina a variável vazia conforme abaixo.

$config['index_page'] = '';

É isso, funcionou para mim.

Se não funcionar, tente substituir a seguinte variável por estes parâmetros ('AUTO', 'PATH_INFO', 'QUERY_STRING', 'REQUEST_URI' e 'ORIG_PATH_INFO') um por um

$config['uri_protocol'] = 'AUTO';
Shaolin
fonte
3
obrigado, eu tenho falhado nisso há muito tempo, não sei por que, mas seu jeito funcionou como manteiga: D
Ahmed Samy
1
Obrigado MDeSilva. Este post economiza meu tempo.
sanji,
1
Obrigado. Funciona. BTW, eu não preciso alterar config.php.
Stony,
1
Obrigado, este me ajudou, usei PATH_INFO com WAMP
T.Coutlakis
21

Dê uma olhada no system\application\config\config.phparquivo, há uma variável chamadaindex_page

Deveria ser assim

$config['index_page'] = "index.php";

mude para

$config['index_page'] = "";

Então, como mencionado, você também precisa adicionar uma regra de reescrita ao .htaccessarquivo

Nota: no CodeIgniter v2 este arquivo foi movido da pasta do sistema para application\config\config.php

Re0sless
fonte
9

Todos os métodos acima falharam para mim e então descobri que não estava alterando AllowOverride None para AllowOverride All em meu arquivo host virtual em / etc / apache2 / sites-available / default

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride All    <---- replace None with All
    </Directory>
    <Directory /var/www >
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All   <---  replace None with All
            Order allow,deny
            allow from all
    </Directory>

     ...

waqas
fonte
Muito obrigado, também recebi aquele AllowOverride None, agora funciona!
Willy
O blog acabou e eu gostaria muito de lê-lo. Nenhuma dessas soluções está funcionando para mim ...
Kevin Beal
incrível, salvou meu dia.
JChow de
6
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /codeigniter/index.php/$0 [PT,L]

após alterar RewriteRule. * index.php / $ 0 [PT, L] com o nome da pasta do projeto "codeigniter". está funcionando para mim. Obrigado pessoal pelo apoio.

Capitão Sparrow
fonte
6

Etapa 1 => Coloque seu arquivo .htaccess na pasta raiz onde existem as pastas do aplicativo e do sistema.

Etapa 2 => Se o seu caminho da web estiver usando uma subpasta como - seudominio.com/projeto/ - use o seguinte código no arquivo htaccess

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

Se o seu caminho da web usa uma pasta raiz como - seudomínio.com -, use o seguinte código no arquivo htaccess

RewriteEngine on
RewriteBase    /
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
vinod
fonte
Tentei usar o primeiro dos exemplos acima funciona apenas na minha raiz, mas não nos carregamentos de formulário, etc. ainda tentarei usar index.php em urls, vou brincar e voltar a isso se puder disparar
Sam
Obrigado @ Vinod. Estava enlouquecendo com esse problema. Faz muito tempo que procuro na net, tentei várias soluções, mas nunca funcionaram até que encontrei sua solução. Agora meu projeto de CI está funcionando e me deu NOVA ESPERANÇA para seguir em frente com o CI. Muito
obrigado
5

Só pensei em adicionar

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

seria o .htaccess e certifique-se de editar sua variável application / config.php da seguinte maneira:

substituir

$config['uri_protocol'] = AUTO 

com

$config['uri_protocol'] = REQUEST_URI
Jefkine Kafunah
fonte
5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 

Isso definitivamente deve funcionar .. tente

Ramaraju.d
fonte
4

Certifique-se de ter ativado mod_rewrite(eu não tinha).
Para habilitar:

sudo a2enmod rewrite  

Além disso, substitua AllowOverride NoneporAllowOverride All

sudo gedit /etc/apache2/sites-available/default  

Finalmente ...

sudo /etc/init.d/apache2 restart  

Meu .htaccess é

RewriteEngine on  
RewriteCond $1 !^(index\.php|[assets/css/js/img]|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]  
miguelitomp
fonte
Outro módulo que precisei habilitar foi actions: stackoverflow.com/questions/14419757/…
Jasdeep Khalsa
4

Solução perfeita [testada em localhost e também em domínio real]

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L] 
Abhishek Goel
fonte
3

Este é um .htaccess para um dos meus projetos de CI:

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

A última linha deve fornecer o que você precisa, embora você possa ou não precisar de '/ projectFolder' dependendo de como sua estrutura de pastas está configurada. Boa sorte!

Matthew Rapati
fonte
3

Como um arquivo .htaccess, uma boa opção é usar o fornecido pelo Kohana Framework :

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

É um .htaccess bem pensado que simplesmente funciona.

Laurent
fonte
3

Existem duas maneiras de resolver index.php no caminho de url para codeigniter

1: Em config / config.php Alterar código:

$config['index_page'] = 'index.php';

para

$config['index_page'] = '';

2: Crie .htacess no caminho raiz se não for criado, copie o seguinte código: -

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

Salve-o e verifique em sua configuração do Apache rewrite_module OU mod_rewrite está habilitado. Se não estiver habilitado. (Melhor abordagem)!

Devraj Gupta
fonte
Isso está correto e vem direto dos documentos do CodeIgniter. Eu também estou usando esse método.
Dewald Els
2

Eu testei isso no apache2 em muitas hospedagens diferentes e funciona muito bem.

use este htaccess

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

certifique-se de ter enabled mod_rewirtecom umphpinfo();

então faça isso em config / config.php:

$config['index_url']    = '';
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

se ainda não funcionar, tente mudar o $config['uri_protocol']='AUTO'para um dos listados dentroapplication/config/config.php arquivos na linha 40/54:

às vezes eu usei: em REQUEST_URIvez de AUTOou "QUERY_STRING"para hospedagens goDaddy

sou eu
fonte
2

Olhe no \application\config\config.phparquivo, há uma variável chamadaindex_page

Deveria ser assim

$config['index_page'] = "index.php";

mude para

$config['index_page'] = "";

Então, como mencionado, você também precisa adicionar uma regra de reescrita ao .htaccessarquivo como esta:

RewriteEngine on
RewriteCond $1 !^(index\\.php|resources|robots\\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

Funciona para mim, espero que você também.

planador
fonte
2

Se você estiver no Linux e usando o servidor apache2, então podemos precisar substituir o arquivo apache2.conf também ao lado das mudanças no arquivo .htaccess. Encontre o arquivo de configuração do apache2 em /etc/apache2/apache2.conf .

Pesquisar no diretório / var / www / Alterar AllowOverride Nenhum -> AllowOverride Todos

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory
Rabin
fonte
1

coloque um arquivo .htaccess em seu diretório raiz da web

Qualquer ajuste que você fizer - se o exposto acima não for atendido - não funcionará. Normalmente está na pasta System, deve estar na raiz. Felicidades!

foxybagga
fonte
2
Depois de passar algumas horas, li isso e descobri meu erro.
mohsin.mr
Também passei pelo menos uma hora por causa desse "pequeno" truque. Por padrão, os arquivos .htaccess vêm no applicationdiretório em vez de na raiz.
vadim
1

Eu tentei muitas soluções, mas a que encontrei é esta:

DirectoryIndex index.php
RewriteEngine on

RewriteCond $1 !^(index\.php|(.*)\.swf|forums|images|css|downloads|jquery|js|robots  \.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?$1 [L,QSA]

Isso irei remover o index.php da url conforme necessário.

codegeek
fonte
0

Isso ajudará você a colar este código na pasta do aplicativo no arquivo .htacess

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

<Files "index.php">
AcceptPathInfo On
</Files>
<IfModule mod_php5.c>
  php_value short_open_tag 1
</IfModule>
Majid
fonte
0

Este me fez a mágica completa:

RewriteEngine on
RewriteBase /
# Hide the application and system directories by redirecting the request to index.php
RewriteRule ^(application|system|\.svn) index.php/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [QSA,L]

Espero que ajude!

bmnepali
fonte
0

Oi este me deu certo

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

assim como isso

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

onde a pasta é o nome da subpasta se este aplicativo codeigniter estiver hospedado como um subdomínio, por exemplo, domainname / folder / index.php.

Espero que funcione para você. Obrigado.

iluminar
fonte
0

Copie o código anterior a seguir em seu .htaccess

RewriteEngine on
Options -Indexes
RewriteCond $1 !^(index\.php|assets|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
dev87
fonte
Embora este código possa responder à pergunta, fornecer contexto adicional sobre por que e / ou como este código responde à pergunta melhora seu valor a longo prazo.
Benjamin W.
0
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /Foldername of your ci/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
mohd jagir
fonte
0

Passo 1 :

Adicione isso no arquivo htaccess

<IfModule mod_rewrite.c> 
RewriteEngine On 
#RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^ index.php [QSA,L] 
</IfModule>

Passo 2 :

Remova index.php na configuração do codeigniter

$config['base_url'] = ''; 
$config['index_page'] = '';

Etapa 3 :

Permitir substituição de htaccess na configuração do Apache (comando)

sudo nano /etc/apache2/apache2.conf e edite o arquivo e mude para

AllowOverride All

para pasta www

Passo 4 :

Apache mod rewrite ativado (Comando)

sudo a2enmod reescrever

Etapa 5:

Reinicie o Apache (Comando)

sudo /etc/init.d/apache2 restart
Shashank Saxena
fonte