Pourquoi mon fichier .htaccess est-il redirigé vers le chemin complet du serveur au lieu du chemin relatif?

Je n’ai jamais eu de problème avec CakePHP avant, mais quelque chose de bizarre à propos de ce serveur fait que les redirections dans les fichiers .htaccess se comportent bizarrement.

CakePHP utilise mod_rewrite dans les fichiers .htaccess pour redirect les requêtes vers son propre dossier webroot. Le problème est que les redirections répertorient le chemin incorrect et provoquent une erreur 404. Mon application CakePHP, stockée dans le répertoire listings, contient un fichier .htaccess comme suit:

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

(* notez que le R = 301 provoque une redirection externe afin que nous puissions voir ce qui se passe de notre côté. Il devrait vraiment omettre cet indicateur et faire la redirection en interne, transparente pour les utilisateurs finaux)

Ceci est censé redirect toute demande de http://hostname.com/~username/listings/ vers http://hostname.com/~username/listings/app/webroot/ Cependant, plutôt que d’append simplement ” app/webroot/ “À la fin comme il est censé le faire, il ajoute le chemin d’access complet du serveur ( /home/username/public_html/listings/app/webroot/ ) pour obtenir l’URL finale http://hostname.com/home/username/public_html/listings/app/webroot/ qui est évidemment incorrect et déclenche une erreur 404.

L’hébergement est sur un compte d’hébergement partagé, ce qui limite ce que je peux faire avec les parameters. Je n’ai jamais vu cela se produire auparavant et je pense que c’est quelque chose qui ne va pas du côté de l’hébergement, mais si quelqu’un a des suggestions utiles, je peux également les transmettre à la société d’hébergement.

La solution à votre question peut être trouvée au bas de cette page dans le livre cakephp:

Pour de nombreux services d’hébergement (GoDaddy, 1and1), votre serveur Web est en fait servi depuis un répertoire utilisateur qui utilise déjà mod_rewrite. Si vous installez CakePHP dans un répertoire utilisateur ( http://example.com/~username/cakephp/ ) ou toute autre structure d’URL utilisant déjà mod_rewrite, vous devrez append des instructions RewriteBase aux fichiers .htaccess utilisés par CakePHP. (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

J’ai également déployé CakePHP depuis le dossier public_html de mon profil. J’ai dû changer 3 les mêmes fichiers .htaccess mentionnés ci-dessus. Ajoutez simplement RewriteBase /~username/ aux fichiers .htaccess juste après RewriteEngine on !

Essayez de supprimer .htaccess du fichier principal … Cela a fonctionné pour moi

C’était assez simple (en utilisant l’hôte partagé uolhost):

Modifiez les deux fichiers .htaccess:

/webroot/.htaccess

/.htaccess

Ajoutez la ligne suivante: RewriteBase /

Voici le fichier /webroot/.htaccess complet:

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