Welcome to the Cookbook

loading...

3.3.4 Apache y mod_rewrite (y .htaccess)

El texto original ha cambiado despues que la traduccion. Por favor ayundanos a reslover este differencia. Puedes:

Mas info sobre traduciones

A pesar de que CakePHP está hecho para funcionar con mod_rewrite sin tocar nada, y normalmente así es, hemos notado que algunos usuarios tienen dificultades para lograr que todo funcione correctamente en sus sistemas.

Aquí hay unas cuantas cosas que puedes probar para conseguir que funcione correctamente. Primero mira en tu httpd.conf (asegúrate de estar editando el httpd.conf del sistema y que no es httpd.conf específico de un usuario o del site).

  1. Asegúrate que la reescritura .htaccess esté permitida y que AllowOverride esté establecido a All para el DocumentRoot adecuado. Deberías ver algo similar a:

    #
    # Cada directorio al que tiene acceso Apache puede ser configurado en
    # función de qué servicios y características están permitidas y/o 
    # desactivadas en dicho directorio (y sus subdirectorios).
    #
    # Primero, configuramos "por defecto" para que sea un conjunto de
    # características muy restrivo.
    #
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    #    Order deny,allow
    #    Deny from all
    </Directory>
    
    1. #
    2. # Cada directorio al que tiene acceso Apache puede ser configurado en
    3. # función de qué servicios y características están permitidas y/o
    4. # desactivadas en dicho directorio (y sus subdirectorios).
    5. #
    6. # Primero, configuramos "por defecto" para que sea un conjunto de
    7. # características muy restrivo.
    8. #
    9. <Directory />
    10. Options FollowSymLinks
    11. AllowOverride All
    12. # Order deny,allow
    13. # Deny from all
    14. </Directory>
  2. Asegúrate de estar cargando el módulo mod_rewrite correctamente. Debes ver algo como:

    LoadModule rewrite_module libexec/apache2/mod_rewrite.so
    1. LoadModule rewrite_module libexec/apache2/mod_rewrite.so

    En muchos sistemas esto estará comentado (comenzando la línea con #) por defecto, así que sólo tendrás que quitar los símbolos # del principio.

    Tras realizar los cambios reinicia Apache para estar seguro de que las opciones de configuración están activas.

    Asegúrate de que tus ficheros .htaccess están en los directorios correctos. Esto puede pasar durante la copia porque algunos sistemas operativos consideran los archivos que comienzan por '.' como ocultos y por lo tanto no los copian.

  3. Asegúrate de que tu copia de CakePHP es de las sección de descargas de nuestro site o nuestro repositorio GIT, y que ha sido desempaquetado correctamente verificando que existen los ficheros .htaccess:

    En el directorio raíz de Cake (necesita ser copiado al directorio, esto redirige todo a tu aplicación de Cake):

    <IfModule mod_rewrite.c>
       RewriteEngine on
       RewriteRule    ^$ app/webroot/    [L]
       RewriteRule    (.*) app/webroot/$1 [L]
    </IfModule>
    
    1. <IfModule mod_rewrite.c>
    2. RewriteEngine on
    3. RewriteRule ^$ app/webroot/ [L]
    4. RewriteRule (.*) app/webroot/$1 [L]
    5. </IfModule>

    En el directorio app de Cake (será copiado por bake):

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    webroot/    [L]
        RewriteRule    (.*) webroot/$1    [L]
     </IfModule>
    
    1. <IfModule mod_rewrite.c>
    2. RewriteEngine on
    3. RewriteRule ^$ webroot/ [L]
    4. RewriteRule (.*) webroot/$1 [L]
    5. </IfModule>

    En el directorio webroot de Cake (será copiado a tu webroot de la aplicación por bake):

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    </IfModule>
    
    1. <IfModule mod_rewrite.c>
    2. RewriteEngine On
    3. RewriteCond %{REQUEST_FILENAME} !-d
    4. RewriteCond %{REQUEST_FILENAME} !-f
    5. RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    6. </IfModule>

    En muchos servicios de hosting (GoDaddy, 1and1), tu servidor web está realmente siendo servido desde un directorio de usuario que ya utiliza mod_rewrite. Si estás instalando CakePHP en un directorio de usuario (http://ejemplo.com/~nombreusuario/cakephp), o en cualquier otra estructura que ya utilice mod_rewrite necesitarás añadir sentencias RewriteBase a los archivos .htaccess que utiliza CakePHP (/.htaccess, /app/.htaccess, /app/webroot/.htaccess)

    Esto puede ser añadido a la misma sección con la directiva RewriteEngine, así, por ejmplo, tu archivo .htaccess en el webroot devería ser así:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    </IfModule>
    
    1. <IfModule mod_rewrite.c>
    2. RewriteEngine On
    3. RewriteBase /
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
    7. </IfModule>

    Los detalles de esos cambios dependen de tu configuración, y pueden incluir cosas adicionales que no están relacionadas con Cake. Consulta la documentación online de Apache para más información.