2009-06-04 16 views
11

Estoy tratando de instalar CakePHP en una configuración de alojamiento compartido. Después de extraer los archivos a una ubicación como ~/public_html/dev/torta y visitar la dirección URL correspondiente (en este caso http://hostname/~username/dev/cake/), recibo un error 404: fijación de cakephp .htaccess/mod_rewrite para configuraciones de alojamiento compartido


No se ha encontrado

La URL solicitada/usr/home/username/public_html/dev/cake/app/webroot/no se encontró en este servidor.


Sospecho que la razón de esto es que una inspección más cercana, la ruta absoluta al ~/public_html no es, de hecho, /usr/home/usuario/public_html, sino más bien /usr/www/users/username/.

Aquí es lo que he estado tratando (pero obviamente no está funcionando): (~/public_html/dev/torta/app/Webroot/.htaccess)

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

Desafortunadamente, esto no parece para cambiar cualquier cosa (el mensaje 404 sigue siendo el mismo). ¿Pensamientos?

+0

Cabe señalar que este es el estilo 1.3. ¡Para 2.x, la Regla ha cambiado! Ahora es 'index.php?/$ 1' (no url = parte más) en caso de que alguien intente usarlo ahora con las versiones actuales de CakePHP. – mark

Respuesta

1

¿Por qué no simplemente extraer los archivos a /usr/www/users/username/?

+0

Así que miré a mi alrededor y creo que ahí es donde residen los archivos. Si entiendo Pair (mi host) correctamente, hay un Inicio (/ usr/home/username) y un directorio web (/ usr/www/users/username), que está enlazado a/usr/home/username/public_html (aka ~/public_html). – user117643

1

Creo que el .htaccess está leyendo ese '~' y pensando que está refiriéndose a su carpeta de inicio (que es como un atajo en Linux).

la manera más rápida de ejecutar su aplicación es ir a la configuración/core.php de cake y desactivar el uso de la reescritura (le dice que descomente algunas cosas y elimine algún archivo .htaccess). a la inversa, edite su .htaccess y dígale que '~' no hace referencia al directorio personal. tal vez un simple \ funcionará.

+0

Deshabilitar la reescritura definitivamente funciona, gracias. Creo que solo correré con eso por ahora. – user117643

+0

Probablemente ese no sea el problema: tengo una configuración similar en mi caja (localhost/~ user/cake) y funciona bien. Intente habilitar el registro de reescritura: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog. Si su anfitrión no deshabilitó la directiva, podría ayudarlo a ver qué está pasando mal. –

2

Está modificando el archivo incorrecto. El archivo .htaccess es necesario modificar se encuentra en/dev, que no debería estar modificando la de /dev/cake/app/webroot/.htaccess

13

No debería

RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 

ser

RewriteBase /~username/dev/cake/ 

RewriteBase le preocupa el mapeo de las URL reales a las virtuales, y creo que eso es lo que desea.

+3

Sí, RewriteBase se refiere a la URL lógica/virtual, no a la ubicación del sistema de archivos –

+0

que terminó mi búsqueda para resolver este problema .htaccess, gracias. –

1

Estoy alojando en el par y pude hacer que las reglas de reescritura funcionaran, pero estoy teniendo problemas con el enlace HTML-> obteniendo los parámetros de clasificación para todos los enlaces en las páginas. El mismo código funciona bien en la ventana de ejecución de mi máquina local, pero en la ordenación de pares o en demasiados parámetros de consulta (Editar o Actualizar páginas) causa problemas.

1

Sí, debe dar la ruta DOCUMENT_ROOT en los siguientes archivos. Consulte phpinfo() de su servidor para obtener la ruta DOCUMENT_ROOT correcta. Debería ser algo así como var/www/html/.

  1. ..htaccess en la raíz / directorio (fuera de la aplicación, torta, vendedores directorios)

    <IfModule mod_rewrite.c> 
        RewriteEngine on 
        RewriteRule ^$) DOCUMENT_ROOT/app/webroot/ [L] 
        RewriteRule (.*) DOCUMENT_ROOT/app/webroot/$1 [L] 
    </IfModule> 
    
  2. .htaccess dentro del directorio /app

    <IfModule mod_rewrite.c> 
        RewriteEngine on 
        RewriteRule ^$ DOCUMENT_ROOT/app/webroot/ [L] 
        RewriteRule (.*) DOCUMENT_ROOT/app/webroot/$1 [L] 
    </IfModule> 
    
  3. .htaccess dentro del /app/webroot directorio

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

Me funcionó.

+0

cómo encontrarlo en godaddy? –

1

Tuve un problema similar con la 'instalación avanzada' del Cockbook oficial de CakePHP. Después de un par de horas logré que funcionara.

SO: Mac OS X

directorio núcleo

Cake: /usr/lib/torta
Mi directorio de aplicación aplicación: /Usuarios/miUsuario/dev/miaplicacion
Mi directorio de la aplicación web raíz: /Usuarios/miUsuario/Sitios/miaplicacion

Modificación de /Users/myuser/Sites/myapp/index.php

if (!defined('ROOT')) { 
    define('ROOT', DS.'Users'.DS.'myuser'.DS.'dev'); 
} 
if (!defined('APP_DIR')) { 
    define('APP_DIR', 'myapp'); 
} 
if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'); 
} 

Modificación de /Users/myuser/Sites/myapp/.htaccess

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteBase /~myuser/myapp/ 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

En cuanto a /Users/myuser/dev/myapp/.htaccess - Este archivo es no es necesario en esta configuración, así que lo borré. La parte más complicada con esta configuración es habilitar mod_rewrite en Apache. En la edición de Mac /private/etc/apache2/httpd.conf parece ser inútil (para esta tarea). Se crea un archivo de configuración de Apache adicional para cada usuario.

Modificación de /private/etc/apache2/users/myuser.conf

<Directory "/Users/myuser/Sites/"> 
    Options FollowSymLinks 
    AllowOverride All 
</Directory> 

Por defecto AllowOverride se establece en Ninguno, por lo mod_rewrite no funcionará en esta configuración.

Después de esto cambia http://localhost/~myuser/myapp funcione correctamente.

PS. Rápida corrección de permisos para el directorio tmp.

sudo chgrp -R www /Users/myuser/dev/myapp/tmp 
sudo chmod -R g+w /Users/myuser/dev/myapp/tmp 
2

sólo quiero señalar que yo pensaba que el módulo se cargó porque vi el código, pero al parecer no estaba activado!

habilitarlo en SSH (terminal) escriba el siguiente comando

sudo a2enmod rewrite 

El comando siguiente muestra todos los módulos que están activos, si aparece en la lista, entonces usted ha instalado.

apache2ctl -M 

Asegúrese de reiniciar el servidor con ...

service apache2 restart 

PhpCake debe empezar a trabajar ahora.

Cuestiones relacionadas