¿Por qué es mi archivo .htaccess redireccionamiento de ruta completa del servidor en lugar de ruta relativa?

StackOverflow https://stackoverflow.com/questions/2542820

Pregunta

Nunca he tenido un problema con CakePHP antes, pero algo de extraño en este servidor y que está causando el redirecciones en los archivos .htaccess a comportarse de forma extraña.

CakePHP usos Mod_rewrite en archivos .htaccess para redireccionar peticiones a su propia carpeta web raíz. El problema es que las redirecciones está enumerando el camino equivocado y causando un error 404. Mi aplicación CakePHP, que se almacena en el directorio de listados, tiene un archivo .htaccess de la siguiente manera:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$ app/webroot/    [R=301,L]
    RewriteRule    (.*) app/webroot/$1 [R=301,L]
</IfModule>

(* nota de que la R = 301 causa una redirección externa para que podamos ver lo que está pasando por nuestra parte. En realidad debería omitir esta bandera y hacer la redirección interna, transparente a los usuarios finales)

Esto se supone que redirigir cualquier solicitud de http://hostname.com/~username/listings/ a http://hostname.com/~username/listings/app/webroot/ Sin embargo, en lugar de la simple adición de “app/webroot/” al final, ya que se supone que es, que es la adición de la ruta del servidor completo (/home/username/public_html/listings/app/webroot/) que resulta en la http://hostname.com/home/username/public_html/listings/app/webroot/ URL final que es obviamente incorrecto y desencadena un error 404.

El alojamiento es en una cuenta de alojamiento compartido, por lo que los límites de lo que pueden hacer con los ajustes. Nunca he visto que esto suceda antes, y yo estoy pensando que es algo malo desde el lado de alojamiento de las cosas, pero si alguien tiene algunas sugerencias útiles luego les puedo poner a la empresa de alojamiento también.

¿Fue útil?

Solución

La solución a su pregunta se puede encontrar hacia la parte inferior de esta página en el libro cakephp:

  

Para muchos servicios de hosting (GoDaddy, 1and1), su servidor web está realmente siendo servido desde un directorio de usuario que ya utiliza mod_rewrite. Si está instalando CakePHP en un directorio de usuario ( http://example.com/~username/cakephp/ ), o cualquier otra estructura de la URL que ya utiliza mod_rewrite, tendrá que añadir sentencias RewriteBase a los archivos .htaccess CakePHP usos (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

He desplegado CakePHP de la carpeta public_html de perfil también. Tenía que cambiar 3 los mismos archivos .htaccess mencionados anteriormente. Sólo tiene que añadir RewriteBase /~username/ a los archivos .htaccess justo después RewriteEngine on!

Otros consejos

Prueba quitando .htaccess del archivo principal ... Funcionó para mí

Era bastante simple (uso de acogida uolhost compartido):

Editar ambos archivos .htaccess:

/webroot/.htaccess

/. .Htaccess

Añadir la siguiente línea: RewriteBase /

Aquí está todo el archivo /webroot/.htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top