Bonjour,

Mon site en PHP est fini, et fonctionne parfaitement en local.
Mon site à pour but de rapprocher une famille et quelques amis. J'ai décidé de le faire heberger gratuitement, car le nombre de personne à se connecté est dérisoire. 10 serait un grand maximum, et pas en même temps en plus.

Je le fais donc héberger sur "heberGratuit". J'ai mis tout ce qu'il fallait, à l'endroit qu'il fallait. Seulement je me heurte à un
"HTTP ERROR 500".
Puisque je ne trouves pas la solution depuis un mois, et ce, malgrès leur service de "ticket" qui ne sait que me dire
"Bonjour,

Je pense que le problème vient de votre fichier .htaccess

Cordialement,".

Mon ficher Htaccess est juste une redirection:

RewriteEngine On
RewriteRule (.) webroot/$1 [L]

**

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (. ) index.php/$1 [L]

Et je le répète, ça fonctionne très bien en local.

Sauriez vous me dire quel serait le pb, vous ?

Merci de votre aide.

25 réponses


jeanMat
Réponse acceptée

Bon sang, tu es tout pres, c'est juste une histoire chemin d'accès à ton fichier.

Ton fichier "includes.php" est dans le dossier htdocs/core/ et le fichier "conf.php" est dans htdocs/config/ ??
Donc le

require '../config/conf.php';

devrait fonctionnait

Essaye de mettre les permissions du fichier à 755 (rwxr-xr-x)

On y ai presque

Bonjour, en local vous avez l'option "rewrite_module" de Apache qui permet de gérer ces redirections. Il faut regarder si le serveur sur lequel vous hébergez votre site possède cette option, et si elle la possède il faut l'activer. Il est possible que un hébergement gratuit ne permet pas d'activer cette option et que vous soyez obliger de payer pour l'activer. Il faut donc regarder du côté du serveur Apache de votre hébergeur.
Bonne journée

JoHuv
Auteur

Bonjour, merci pour cette réponse.
Je me suis déjà posé cette question et j'ai ici la réponse:
Dans la configuration, dans un tableau nommée :

Configuration
apache2handler

Il y a cette case dans le tableau:

Loaded Modules:

core mod_so http_core mod_rpaf mod_apreq2 mod_perl mod_php7 mod_ruid2 mod_vhs mod_access_compat mod_alias mod_allowmethods mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_dbd mod_deflate mod_dir mod_env mod_expires mod_filter mod_headers mod_include mod_log_config mod_mime mod_negotiation mod_reqtimeout mod_rewrite mod_setenvif mod_status mod_unique_id mod_unixd prefork mod_hostinglimits

Je vois bien " mod_rewrite "
Pour moi, c'est activé...

Si non, tu peux y accéder sans le .htaccess ou pas?

Essaye ça :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^$ webroot/ [L]
    RewriteRule (.*) webroot/$1 [L]
</IfModule>

et

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

Tu peux commenter ton .htaccess et créer un fichier info.php à la racine qui contient :

<?php
    phpinfo();

Et tu verras la conf du serveur et les différents modules d'activé où non.

JoHuv
Auteur

Bonjour à tous.
Merci pour votre participation

Pour réponde à Mardan, si j'enlève le .htaccess, ça ne fonctionnera pas. J'ai suivi le tuto création du site de A à Z. J'ai des dossiers et sous dossiers. Je ne cache pas avoir essayé de modifier l'emplacement de l'Index.php, tout en enlevant le .htaccess, modifié l'index lui même etc... mais tout est imbriqué. Si je modifie une chose, autant tout refaire. Et j'y ai mis 8 mois pour aboutir (j'ai dû apprendre en même temps :) )

Jean, j'ai la config du serveur, c'est là que j'ai copié l'info du dessus. C'est accessible grâce au CPanel à ma disposition. Après, si besoin, je peux
me pencher dessus (ultérieurement je ne peux pas me concentrer trop longtemps ce jour, j'ai deux filles :D).

BawOu, j'ai remplacé les deux .htaccess comme noté par tes soins. Je n'ai pas de changement: toujours erreur 500. J'avous que je me demande si c'est bien le .htaccess, même s'il marche en local. Seulement, je ne sais pas où ça peut venir d'autre. Puis-je faire confiance à ce que la personne de leur service me dit ?!

JoHuv
Auteur

Bonjour à tous.

JeanMat, j'ai supprimé l'".Htaccess" et mis un "info.php".
J'ai bien fais, tu as eu raison de me demander de faire ça, car je ne trouve nul par la mention du module.
j'ai renvoyé un ticket à l'hébergeur, il me faut savoir ce qui est réellement activé.

S'ils ne l'activent pas, dois-je refaire tout mon site ou il y a t-il une solution pour contourner le .htaccess sans passer sur un hébergeur payant ?

... tout compte fait, c'est possible que le phpinfo ne te donne que les modules PHP d'installés et non les modules Apache.
Essaye ça à la place :

<?php
print_r(apache_get_modules());
?>

Tu verras si le mod_rewrite est actif ou non.

JoHuv
Auteur
Array ( [0] => core [1] => mod_so [2] => http_core [3] => mod_rpaf [4] => mod_apreq2 [5] => mod_perl [6] => mod_php5 [7] => mod_ruid2 [8] => mod_vhs [9] => mod_access_compat [10] => mod_alias [11] => mod_allowmethods [12] => mod_auth_basic [13] => mod_authn_core [14] => mod_authn_file [15] => mod_authz_core [16] => mod_authz_groupfile [17] => mod_authz_host [18] => mod_authz_user [19] => mod_autoindex [20] => mod_dbd [21] => mod_deflate [22] => mod_dir [23] => mod_env [24] => mod_expires [25] => mod_filter [26] => mod_headers [27] => mod_include [28] => mod_log_config [29] => mod_mime [30] => mod_negotiation [31] => mod_reqtimeout [32] => mod_rewrite [33] => mod_setenvif [34] => mod_status [35] => mod_unique_id [36] => mod_unixd [37] => prefork [38] => mod_hostinglimits )

Il y est au [33]. je ne comprends donc pas... c'est à cause de la version d'Apache peut-être ?

Sans le htaccess, je suis bien sur le listing des dossiers.
Quand je met un index bidon en html, je vois la phrase écrite.
C'est vraiment htaccess. Et j'avous ne rien comprendre aux explications sur apache2 et rewrite...

Bon donc le mod_rewrite est bien activé.

Pour valider le fait que se sont bien tes fichiers .htaccess qui posent problème, tu les supprimes (temporairement ;-) ) et tu tente d'accéder directement aux urls "non réécritent"

Exemple : http://www.monsite.fr/webroot/ et http://www.monsite.fr/webroot/index.php/ma_page

Ensuite, tu peux essayer de rajouter cette régle dans ton .htaccess

<Directory “/”>
AllowOverride All
</Directory>
JoHuv
Auteur

j'ai une erreur 500 pour acceder aux pages.
Par exemple, j'ai le listing, que je clic ou que l'écrive directement http://www.nomdusite.hebergratuit.net/webroot/ ou http://www.nomdusite.hebergratuit.net/view/layout/default.php, ceci ne fonctionne pas.

Par contre, quand je fais http://www.f********.net/view/layout/ , le listing s'affiche avec mes pages 'admin', 'default', et 404.

Du coup, si je comprends bien, ce ne serait pas le .htaccess mais les pages ?!

Visiblement, ton hébergeur masque les erreurs PHP, tu as donc une erreur 500 sans plus de précisions.

Rajoute ça en haut de ta page

ini_set('display_errors', 'On');
error_reporting(E_ALL);

Les erreurs vont s'afficher et tu y verras un peu plus clair

Salut,
L'Erreur 500 est une erreur apache, pas PHP ;)
de plus, si ça marche en local, y a pas d'erreur PHP

ini_set('display_errors', 'On');
error_reporting(E_ALL & ~E_NOTICE);

@plus

Pierre.

Bonjour,

Certaines erreurs PHP (erreurs bloquantes, Fatal erreur, ...) font renvoyer à apache une entête HTTP avec un code erreur 500.

Le site fonctionne peut etre en local, mais on est pas à l'abris d'un fonctionnement différents lié à une configuration différentes du serveur.
(Echec de connexion à la BDD, echec d'ecriture dans un fichier, chemin absolue en dur dans le code qui ne pointe plus, ...)
Le fait d'afficher les erreurs PHP permet de faire une levé de doute sur un quelconque problème lié au code.

JoHuv
Auteur

J'ai mis ce bout de script sur mon index. Voici ce que ça sort:

Fatal error: require(): Failed opening required '/home/vol11_4/hebergratuit.net/heber_20873822/htdocs/config/conf.php' (include_path='.:/usr/share/pear/') in /home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core/includes.php on line 7

Alors du coups, mon includes (c'est la ligne 7 ):

<?php
require 'Session.php';
require 'Form.php';
require 'functions.php';
require 'Router.php';

require ROOT.DS.'config'.DS.'conf.php';

require 'Request.php';
require 'Controller.php';
require 'Model.php';
require 'Dispatcher.php';

ça vient donc de mon conf ?

<?php
class Conf{

    static $debug = 1;

    static $databases = array(

        'default' => array( 
            'host'      => 'VERIFIE ET OK',              // adresse du serveur
            'database'  => 'VERIFIE ET OK',      // base de donnée
            'login'     => 'VERIFIE ET OK',                      // Login de connection
            'password'  => 'VERIFIE ET OK'                           // Mot de passe
        )
    );

}

Router::prefix('administrateur','admin');

Router::connect('','posts/index');
Router::connect('administrateur','administrateur/posts/index');
Router::connect('page/:slug-:id','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect('blog/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');  
Router::connect('blog/category/:slug','posts/category/slug:([a-z0-9\-]+)');
Router::connect('blog/*','posts/*');

J'avais changé les info de la bdd pour passer sur l'hebergeur. Je viens de vérifier : tout est ok.

... heu, j'ai pas compris, ça fonctionne maintenant ou pas ?

JoHuv
Auteur

je veux dire que ça ne fonctionne toujours pas, mais ce que j'ai renseigné est bien ce que l'hebergeur m'a donné comme host, nom etc....

Pour info, j'ai pu modifier le fait que les erreurs soient notées.

Ok,
Ce que je comprend du message d'erreur c'est qu'il n'arrive pas à ouvrir le fichier "/home/vol11_4/hebergratuit.net/heber_20873822/htdocs/config/conf.php".
Le fichier est il bien présent, au bon endroit, avec les bons droits en lecture ?

JoHuv
Auteur

Le fichier est présent au bon endroit, sans aucune faute. Par contre, les droits en lecture ? je connais ça pour mon serveur, mais pas pour un script. Je l'ai créé sans une seule fois me poser cette question, je ne sais pas comment creer/modifier ces droits.

Dans le cadre d'un hebergement gratuit comme le tiens, je ne pense pas que tu aies des problemes de droits de lecture.

Pourquoi le require de ton fichier de config est different des autres require ?

Peux tu faire des var_dump de tes constantes ROOT et DS en ligne 6 ?
Il faut etre sur que le chemin soit bien correct.

Sinon essaye ça :

require '../config/conf.php';

Où ça :

require $_SERVER['DOCUMENT_ROOT'].'/config/conf.php';
JoHuv
Auteur

Alors, pour le

var_dump(__DIR__);   

en ligne 6

 string(57) "/home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core" 

Pour les essaies

    require '../config/conf.php';

Fatal error: require(): Failed opening required '../config/conf.php' (include_path='.:/usr/share/pear/') in /home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core/includes.php on line 7
Pour

    require $_SERVER['DOCUMENT_ROOT'].'/config/conf.php';

Fatal error: require(): Failed opening required '/home/vol11_4/hebergratuit.net/heber_20873822/htdocs/config/conf.php' (include_path='.:/usr/share/pear/') in /home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core/includes.php on line 7

J'ai trouver les permissions dans leur répertoire

Du dossier Config: rwxr-xr-x
Du fichier conf: rw-r--r--
C'est moi aui en est proprietaire et pas le serveur.

JoHuv
Auteur

Arf ! permissions en 775 et...

Erreur 500.

Alors j'ai tout passé en 755 (sauf les deuxhtaccess)

J'ai remis le bout de code pour les message erreurs:

Warning: require(../config/conf.php): failed to open stream: No such file or directory in /home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core/includes.php on line 7  
Fatal error: require(): Failed opening required '../config/conf.php' (include_path='.:/usr/share/pear/') in /home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core/includes.php on line 7

Petit rappel sur mon includes:

<?php
require 'Session.php';
require 'Form.php';
require 'functions.php';
require 'Router.php';

require '../config/conf.php';

require 'Request.php';
require 'Controller.php';
require 'Model.php';
require 'Dispatcher.php';

Toujours erreur 500.

JoHuv
Auteur

Attends, après vérif, en une coquille s'est glissée: "config/conf.php';" -> c'est "Config" !!!

Une autre erreur est maintenant apparue:

Fatal error: require(): Failed opening required '/home/vol11_4/hebergratuit.net/heber_20873822/htdocs/config/hook.php' (include_path='.:/usr/share/pear/') in /home/vol11_4/hebergratuit.net/heber_20873822/htdocs/core/Controller.php on line 22

Mais là, meme principe: un require hook.php que j'ai modifié comme le conf.
Je suis enfin arrivé sur mon Layout !!!!!
Merci à toi !

Cependant, mon taf n'est pas fini, des erreurs que je n'avais pas en interne se montrent tour à tour.

Encore merci pour ton aide et ton savoir O combien précieux sur ce coup. Et j'ai encore appris plein de choses grace à ça.

Bon, ben tant mieux si tu a réussi.
Les messages d'erreurs sont souvent clairs, dans ton cas ils étaient juste invisibles.
Bonne continuation.