Pourquoi mon fichier .htaccess redirigeant vers le chemin complet du serveur au lieu de chemin relatif?

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

Question

Je ne l'ai jamais eu un problème avec CakePHP avant, mais quelque chose est bizarre sur ce serveur et provoque les réoriente dans les fichiers .htaccess à se comporter bizarrement.

CakePHP utilise mod_rewrite dans les fichiers .htaccess pour rediriger les requêtes vers son propre dossier de Webroot. Le problème est que les réoriente énumèrent le mauvais chemin et provoquant une erreur 404. Mon application CakePHP, qui est stocké dans le répertoire des listes, a un fichier .htaccess comme suit:

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

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

Ceci est censé rediriger toute demande de http://hostname.com/~username/listings/ à http://hostname.com/~username/listings/app/webroot/ Cependant, plutôt que de simplement ajouter « app/webroot/ » à la fin comme il est censé le faire, il ajoute le chemin du serveur complet (/home/username/public_html/listings/app/webroot/) entraînant la http://hostname.com/home/username/public_html/listings/app/webroot/ finale URL qui est évidemment incorrect et déclenche une erreur 404.

L'hébergement est sur un compte d'hébergement partagé, afin que les limites de ce que je peux faire avec les paramètres. Je ne l'ai jamais vu cela auparavant, et je pense qu'il est quelque chose de mal du côté de l'hébergement des choses, mais si quelqu'un a des suggestions utiles alors je peux les mettre à la société d'hébergement ainsi.

Était-ce utile?

La solution

La solution à votre question se trouve vers le bas de http://example.com/~username/cakephp/ ), ou de toute autre structure d'URL qui utilise déjà mod_rewrite, vous devrez ajouter des déclarations RewriteBase aux fichiers .htaccess utilisations CakePHP (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).

Je l'ai déployé CakePHP de mon profil le dossier public_html ainsi. Je devais changer 3 les mêmes fichiers .htaccess mentionnés ci-dessus. Il suffit d'ajouter RewriteBase /~username/ aux fichiers .htaccess juste après RewriteEngine on!

Autres conseils

Essayez de supprimer .htaccess du fichier principal ... Il a travaillé pour moi

Il était assez simple (en utilisant uolhost hôte partagé):

Modifier les deux fichiers .htaccess:

/webroot/.htaccess

/. Htaccess

Ajoutez la ligne suivante: RewriteBase /

Voici le tout fichier /webroot/.htaccess:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top