Problème pour mettre en ligne mon site!

a marqué ce sujet comme résolu.

Bonjour à tous!

J'ai commencer il y à quelques temps à utiliser le framework php CodeIgniter pour réaliser un petit site à destination des étudiants en économie. Mon site fonctionne parfaitement en local, tout va bien.

Sauf que je n'arrive pas à mettre mon site en production. La page d'accueil renvois une erreur 404. Le site est dispo ici: www.econobvious.fr

J'ai vérifier les éléments suivants: -pas de problème de case ou de nom de majuscule dans le nom du contrôleur principal -j'ai bien modifié le fichier config.php pour indiquer le nouveau chemin de base du site -je n'ai jamais touché au fichier route -le nom du contrôleur de base ("accueil") est correctement modifié dans les fichiers de configuration -le site fonctionne parfaitement bien en localhost avec la config de codeIgniter par défaut (juste url rewrinting et contrôleur de base renommé en "accueil" au lieu de "welcome", sinon aucun changement).

Quand on essaye d'aller sur la page contact de mon site qui est normalement accessible via www.econobvious.fr/contact on tombe sur une erreur 500, mais si on fait wwww.econobvious.fr/index.php/contact on tombe sur une erreur 404 de codeIgniter ce qui laisse penser que l'url rewrinting ne serait pas activé correctement. Pourtant www.econobvious.fr/index.php/accueil envois aussi une erreur 404 de même que www.econobvious.fr/index.php donc je ne penses pas que le soucis soit lié…

Je précise que mon hébergement est un mutualisé chez 01&01 donc que j'ai juste un accès ftp.

Je débute avec CodeIgniter et ceci est mon premier site, donc j'ai sans doute oublier de paramétrer correctement un truc ou autre erreur simple, mais je n'arrive pas à trouver quoi… Je peux mettre le code des fichier config et controleur principal si ça peut aider!

Merci d'avance pour votre aide!

+0 -0

voilà :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

<Files admin> # this is the name of your CodeIgniter controller
AuthName "admin"
AuthType Basic
AuthUserFile C:\wamp\www\Econobvious\.htpasswd
require valid-user
</Files>

<Files traitementAdmin> # this is the name of your CodeIgniter controller
AuthName "traitementAdmin"
AuthType Basic
AuthUserFile C:\wamp\www\Econobvious\.htpasswd
require valid-user
</Files>

Je penses pas que le soucis de chemin vers le .htpasswd soit un réel problème si? Je vais essayer de mettre le bon chemin pour voir!

+0 -0

Alors à priori ça résout le problème d'url rewriting merci! Maintenant la page www.econobvious.fr/accueil donne bien une erreur 404 au lieu d'une erreur 500 comme avant!

Mais malheureusement ça ne résouds pas mon souçis principal :(

+0 -0

Voici pour le fichier config.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
|--------------------------------------------------------------------------
| Base Site URL
|--------------------------------------------------------------------------
|
| URL to your CodeIgniter root. Typically this will be your base URL,
| WITH a trailing slash:
|
|   http://example.com/
|
| If this is not set then CodeIgniter will try guess the protocol, domain
| and path to your installation. However, you should always configure this
| explicitly and never rely on auto-guessing, especially in production
| environments.
|
*/
$config['base_url'] = 'http://econobvious.fr/';

/*
|--------------------------------------------------------------------------
| Index File
|--------------------------------------------------------------------------
|
| Typically this will be your index.php file, unless you've renamed it to
| something else. If you are using mod_rewrite to remove the page set this
| variable so that it is blank.
|
*/
$config['index_page'] = '';

/*
|--------------------------------------------------------------------------
| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of 'REQUEST_URI' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'REQUEST_URI'    Uses $_SERVER['REQUEST_URI']
| 'QUERY_STRING'   Uses $_SERVER['QUERY_STRING']
| 'PATH_INFO'      Uses $_SERVER['PATH_INFO']
|
| WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded!
*/
$config['uri_protocol'] = 'REQUEST_URI';

/*
|--------------------------------------------------------------------------
| URL suffix
|--------------------------------------------------------------------------
|
| This option allows you to add a suffix to all URLs generated by CodeIgniter.
| For more information please see the user guide:
|
| http://codeigniter.com/user_guide/general/urls.html
*/

$config['url_suffix'] = '';

/*
|--------------------------------------------------------------------------
| Default Language
|--------------------------------------------------------------------------
|
| This determines which set of language files should be used. Make sure
| there is an available translation if you intend to use something other
| than english.
|
*/
$config['language'] = 'french';

Le reste du fichier n'a pas été modifié!

Oui j'ai bien mis le config['index_page'] = "" comme tu peux le voir!

Voici aussi le fichier routes.php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|   example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|   http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There are three reserved routes:
|
|   $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
|   $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router which controller/method to use if those
| provided in the URL cannot be matched to a valid route.
|
|   $route['translate_uri_dashes'] = FALSE;
|
| This is not exactly a route, but allows you to automatically route
| controller and method names that contain dashes. '-' isn't a valid
| class or method name character, so it requires translation.
| When you set this option to TRUE, it will replace ALL dashes in the
| controller and method URI segments.
|
| Examples: my-controller/index -> my_controller/index
|       my-controller/my-method -> my_controller/my_method
*/
$route['default_controller'] = 'accueil';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
+0 -0

Alors j'ai rester de mettre une majuscule a la route ET au fichier du contrôleur et miracle, ca fonctionne.. (alors qu'en local tout fonctionne bien en minuscule… :p )!

Mais maintenant j'ai plein d'erreurs qui s'affichent et que je n'ai jamais eu : http://www.econobvious.fr/

EDIT: les erreurs étaient normales et liés à un mauvais paramètrage de la config du fichier database.php, maintenant la page d'accueil s'affiche correctement.

A priori j'ai compris le soucis: le nom de mes fichiers contrôleurs et modèles DOIT commencer par une majuscule pour que ça fonctionne. J'ai fais le teste avec le contrôleur "theories" qui à pris une majuscule ainsi que le model associè et la page fonctionne correctement…

Cela me surprend énormément car dans le tuto que j'ai suivis ( http://openclassrooms.com/courses/codeigniter-le-framework-au-service-des-zeros/le-controleur-15 ) c'est précisé noir sur blanc qu'il faut mettre en minuscule le nom du fichier, seulement le nom de la classe doit commencer par une maj.. Idem sur stackoverflow une personne à résolu son soucis en fesant l'inverse: en passant le nom du controleur d'une majuscule à une minuscule… (http://stackoverflow.com/questions/3948167/codeigniter-app-shows-404-when-moved-to-production).

Manifestement je dois renommer tous les contrôleurs et models avec une majuscule pour que ça fonctionne, même si je trouve ça très étrange…

+0 -0

J'ai compris le soucis :)

C'est une nouveauté de la nouvelle version toute fraiche codeIgniter3.0 qui demande une majuscule pour les fichiers ctrl, modele et autres… (cf: http://www.luc-sanchez.fr/2014/06/miger-framework-codeigniter-2-1-4-vers-3-0-0/#.VUqMwpP-uLM)

Du coup tout va bien, plus qu'à modifier mon code pour prendre en compte ceci et mettre mon site en ligne, que je pourrais venir présenter ici :p

Merci encore à Zayon de m'avoir mis sur la piste :)

+0 -0

Juste un dernier point, tu parle d'erreurs qui s'affichent sur ta page d'accueil, as tu pensé a mettre ton en application en mode production ? (dans le fichier index.php)

C'est une mauvaise pratique d'afficher les erreurs en production.

CodeIgniter permet de gérer facilement plusieurs environnements grâce a ce système, notamment si la configuration n'est pas la même (souvent la connexion a la base de donnée) tu peux creer un sous dossier dans application/config/ pour chaque environnement du style:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
application/
    config/
        development/
            database.php
        production/
            database.php
        routes.php
        ...
    controllers/
    ....
system/

Oui j'ai bien pensé à mettre l'appli en production, simplement j'avais remis development histoire d'avoir plus d'infos pour débuger car le soucis n'étais présent qu'en production (sans doute car windows gère différemment les maj en début de nom de fichier). Mais je vais repasser la variable en production dés que j'ai tout remis en ordre!

Par contre ce que tu dis sur les différents mode de production m'intéresse énormément, je ne savais justement pas comment aborder ce problème correctement! Je te mp pour en discuter si tu veux bien me donner encore quelques précieux conseils :)

+0 -0

humm essaye ça :

1
$route['default_controller'] = 'Accueil';

Il faut mettre le nom de la classe il me semble

Zayon

Le router ne fait qu'associer une URL avec une autre, il n'y a pas vraiment de rapport avec la classe du controller à ce niveau.

Par contre le nom de la class du controller (dans le fichier idoine) doit bien être en CamelCase. ;)

Oui le nom est en CamelCase pas de soucis, mais le nom du fichier aussi doit aussi y être depuis la version 3 de CodeIgniter alors que ce n'était pas le cas avant! D'où mon problème :)

Je galère un peu car même si je met les noms des fichiers en CamelCase sous windows quand j’envoie sur le serveur il remet la première lettre en minuscule ce qui est pénible… Mais je vais essayer de bidouillé et de faire en sorte que le site soit fonctionnel pour la fin de l'aprém :D

+0 -0

J'avoue que j'aimais mieux aussi en minuscules mais bon… :p

Oui j'ai déjà essayer de tout supprimé pour tout ré-upload et c'est là justement que j'ai vu le problème… A priori le site fonctionne normalement là maintenant que j'ai tout changer manuellement!

+0 -0

Par contre le nom de la class du controller (dans le fichier idoine) doit bien être en CamelCase. ;)

viki53

Pour être précis c'est ucfirst dans leur doc

Class names must start with an uppercase letter.

Du coup avec la version 3 je sais pas comme ça match avec le nom du fichier si on fait du CamelCase

Je galère un peu car même si je met les noms des fichiers en CamelCase sous windows quand j’envoie sur le serveur il remet la première lettre en minuscule ce qui est pénible… Mais je vais essayer de bidouillé et de faire en sorte que le site soit fonctionnel pour la fin de l'aprém :D

Demandred

J'ai eu le meme soucis, alors je te donne la solution : git mv -f nom_avant nom_apres

Edit: c'est a cause de windows qui gere pas la case sur le nom des fichiers, du coup quand tu renomme ton fichier, git sur ton windows ne voit pas ce changement donc il trace pas le fichier comme renommé

+0 -0

hum quelle différence entre ucfirst et CamelCase? En ucfirst on ecrirait du genre"Mon_super_ctrl" alors qu'en camel case ça donnerait plutôt "MonSuperCtrl" ?

Je n'utilise pas le terminal de git mais une interface graphique (vu que je ne fais que des choses trés simples avec pour l'instant). Si je comprends bien il faudrait que je renomme avec cette commande tous les fichiers concernés c'est ça? Heureusement que j'ai une 15aine de fichiers à renommer à tout casser par ce que sinon ça serait l'horreur :p

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte