2011-11-24 18 views
5

He instalado un servidor limpio Apache2 (más PHP & MySQL) y habilité el mod_rewrite en la configuración de apache. Agregué el archivo .htaccess para eliminar el index.php de la url como se describe en la wiki de CodeIgniter.Reescritura para CodeIgniter no funciona

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

He colocado este archivo en la raíz del sitio web.

Cuando intento acceder a la url mydomain.local/index.php/welcome, aparece la página predeterminada de CodeIgniter. Pero cuando intento acceder a la misma página a través del mydomain.local/welcome, aparece la página 404.

¿Cómo puedo comprobar si la regla de reescritura completa está funcionando? ¿Y por qué no está funcionando?

Respuesta

9

Encontré la solución. La configuración de Apache no permitió ejecutar el archivo htaccess. Así que tuve que configurar el indicador AllowOverride en el directorio AllowOverride ALL.

¡Gracias por toda la ayuda!

+3

gracias ... resolvió exactamente mi problema – hforbess

0

tiene que quitar el index.php de la página de índice en el archivo de configuración

/application/config/config.php

$config['index_page'] = ''; 

probar este material .htaccess, que es lo que yo estoy usando:

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

también puede ser necesario para permitir que mod_rewite en configuración de Apache.

+0

Se eliminó del archivo, pero aún no funcionará. :( –

+0

No funciona :(¿No hay una forma de comprobar si se está ejecutando todo el archivo .htaccess? –

9

Suponiendo que su configuración (/application/config/config.php) tiene la index_page discapacitados:

$config['index_page'] = ''; 

Y tu Apache DocumentRoot es: /srv/www/

Cree un archivo .htaccess en el mismo nivel que su directorio /application/, con el siguiente contenido:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

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

Usted debe notar que RewriteBase puntos a la DocumentRoot (/). Si el index.php está en otro directorio, debe cambiar RewriteBase en consecuencia.

Para una estructura de directorios como:

/srv/www/application/ 
/srv/www/system/ 
/srv/www/index.php 
/srv/www/.htaccess 

Su RewriteBase debe ser: /

Para una estructura de directorios como:

/srv/www/codeigniter/application/ 
/srv/www/codeigniter/system/ 
/srv/www/codeigniter/index.php 
/srv/www/codeigniter/.htaccess 

Su RewriteBase debería haber : /codeigniter/

Y así sucesivamente, se obtiene la imagen.

0

Intente cambiar la configuración de configuración de uri_protocol. Además, algunos servidores requieren esta modificación en el archivo .htaccess:

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

El signo de interrogación después de que la última barra. Trata eso.

También asegúrese de que su mod_rewrite esté activado.

+0

Mod_rewrite está activado y se carga en función de la información de phpinfo(). Pero la adición no funciona.Realmente empiezo a preguntarme si todo el mod de reescritura está funcionando ... –

+0

Hm, ¿está reescribiendo NADA? Realice algunas pruebas, incluso fuera de CI, luego podrá localizar el problema. – Shomz

1

.htaccess por defecto (de userguide ci http://ellislab.com/codeigniter/user-guide/general/urls.html)

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

He confundir el código anterior por un momento, pero tengo código como este:

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

en el servidor local debe agregar"./"delante de index.php (3ra línea) porque en mi caso, el directorio ci no está en la raíz. Creo que "./" significa que debe ser relativa ruta. Para la condición adicional ".*\.css|.*\.js|.*\.png", significa que apache no debe reescribir en el archivo con las extensiones css, js y png.

0

Si se encuentra con 500 Internal Server Error. El primer lugar para buscar es el archivo apache error.log. Para mí, el error estaba relacionado con el comando AddOutputFilterByType.

de comando no válido 'AddOutputFilterByType', tal vez mal escrito o definido por un módulo no incluido en la configuración del servidor.

Para mi configuración, dos módulos no estaban habilitados en la configuración de apache, mientras que los comandos respectivos se estaban utilizando en el .htaccess. Así que una vez que habilité el filter_module y el deflate_module todo volvió a la normalidad.

Cuestiones relacionadas