web-dev-qa-db-fra.com

Codeigniter - Obtenir l'erreur 404 Not Found

Nous avons deux forfaits d'hébergement à GoDaddy. Notre site Web fonctionne correctement en utilisant le fichier .htaccess suivant. Le site Web est accessible sans utiliser index.php dans l'URL.

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

Nous avons utilisé le même fichier htaccess et le même code sur d'autres hébergements hébergés également par godaddy. Nous voulions simplement séparer les instances de production et de développement. Mais sur d’autres hébergements avec le même code et le même fichier htaccess, le site Web indique 404 erreur introuvable, mais le site Web fonctionne bien avec index.php dans l’URL.

Nous avons la même version php sur les deux serveurs. Je veux juste savoir quel pourrait être le problème?

10
Anjum

J'ai également rencontré le même problème lorsque j'ai déplacé mon code de travail à 100% sur un serveur Debian dédié. Après 3 heures de recherche, j'ai découvert pourquoi le fichier htaccess ne fonctionnait pas. Vous devez autoriser le remplacement de htaccess dans la configuration d'Apache.

Voici les étapes.

Étape 1:

Ajouter ceci dans le fichier htaccess

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

Étape 2:

Supprimer index.php dans codeigniter config

$config['index_page'] = '';

Étape 3:

Autoriser le remplacement de htaccess dans Apache Configuration (Command)

Sudo nano /etc/Apache2/Apache2.conf

et éditez le fichier et passez à

AllowOverride All

pour le dossier www

Étape 4:

Redémarrer Apache (Commande)

Sudo /etc/init.d/Apache2 restart

Avant de modifier le fichier Apache2.conf, veillez à en créer une copie de sauvegarde. Si vous utilisez un serveur Debian, vous pouvez éviter la commande Sudo. Je crois que vous savez comment vous connecter à votre serveur en utilisant un logiciel client ssh comme PuTTY. Commentaire ci-dessous si cette méthode ne fonctionne pas pour vous.

10
Geordy James

Vous pouvez utiliser ceci. Cela fonctionne pour moi dans l'hébergement GoDaddy.

RewriteEngine On 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?/$1
2
Ivan

Essayez de mettre tous vos contrôleurs en minuscule. Cela corrige le problème pour moi.

1
Carlos R

essayez celui-ci .. ça marche pour moi ..

DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
1
Ramanjit Singh

dans index.php, vous lancez un "test" et lancez. Vous pouvez alors vérifier s'il est appelé ou non . dans le fichier de configuration activer le journal des erreurs . Rendre votre dossier/application/logs accessible en écriture . En /application/config/config.php ensemble. $config['log_threshold'] = 4; 

vérifier le journal log /application/logs

1
Nishancw

J'ai rencontré le même problème quand je me suis déplacé sur le serveur GoDaddy. Et c'est un travail pour moi.

Ajoutez ce code dans votre fichier .htaccess.

<IfModule mod_rewrite.c>
    RewriteEngine On

   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d

   # Rewrite all other URLs to index.php/URL
   RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

</IfModule>
<IfModule !mod_rewrite.c>
       ErrorDocument 404 index.php
</IfModule>

Dans le fichier de configuration:

$config['base_url'] = 'domain.com';
$config['index.php'] = '';

Et Set AllowOverride to All dans votre httpd.conf

définissez l'autorisation correcte sur le dossier/cache, plutôt que de simplement rendre le dossier accessible en écriture, vous devez le rendre accessible en écriture.

J'espère que cela fonctionnera pour vous.

1
Jay Kareliya

Suivez ceci

  • Créez un nouveau fichier .htaccess dans votre racine public_html/Project
  • Coller le code suivant

    RewriteEngine on
    RewriteBase /
    RewriteCond $1 !^(index\.php|resources|robots\.txt|static) [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/?$1 [L,QSA]
    

  • Optionnel 

Si vous pouvez ssh sur le serveur en utilisant la commande ssh username@ip_address sur une ligne de commande, utilisez un terminal Linux ou PuTTY.

La username est celle que GoDaddy vous a donnée ou vous pouvez utiliser root

Le ip_address serait l'adresse IP publique de votre hôte, vous pouvez le trouver dans votre panneau d'hébergement

Exécutez la commande Sudo a2dissite 000-default

La commande désactive la configuration Apache par défaut qui gère les requêtes.

Bonne chance!

0
Abolarin stephen

Comme vous l'avez mentionné ici, sur localhost, votre code fonctionne bien, mais lorsque vous l'avez déplacé sur un serveur actif, il génère une erreur 404. Vous devrez peut-être vérifier quelques cas:

Etape 1: Vérifiez que mod_rewrite est activé ou non dans votre configuration Apache

Étape 2: Supprimez index.php dans la configuration de codeigniter comme suggéré par @geordy

Vous pouvez vérifier par

<?php
echo 'Test'; die;
?>

dans votre racine index.php. Cela garantit que toutes vos demandes passent par ces fichiers, sinon la structure Codeigniter ne fonctionnerait pas correctement.

0
Abhishek Singh

J'ai des connaissances limitées en réseau de serveurs, mais cela devrait vous donner quelques idées.

Tout d’abord, vous devez savoir quel est le fichier .htacess. vous pouvez le vérifier ici link

.htaccess est un fichier de configuration à utiliser sur les serveurs Web exécutant le fichier Logiciel Apache Web Server. Lorsqu'un fichier .htaccess est placé dans un fichier répertoire qui est à son tour "chargé via le serveur Web Apache", puis le fichier .htaccess est détecté et exécuté par le serveur Web Apache Logiciel. Ces fichiers .htaccess peuvent être utilisés pour modifier la configuration du logiciel Apache Web Server pour activer/désactiver des fichiers .__ supplémentaires. fonctionnalités et fonctionnalités que le logiciel Apache Web Server doit posséder offre. Ces installations incluent la fonctionnalité de redirection de base, pour exemple si une erreur de fichier non trouvé 404 se produit, ou pour une version plus avancée des fonctions telles que la protection par mot de passe du contenu ou le lien dynamique d’image la prévention.

En gros, .htaccess vous donne l’autorisation de modifier la configuration de serveur Web Apache. Vous obtiendrez une autorisation en utilisant .htacess si mod_rewrite est activé dans Apache. Je n'écrirai pas ce que cette ligne de base dans .htaccess peut faire dans codeigniter car vous pouvez la trouver dans google. this link peut vous donner quelques informations de base sur Nice.

Maintenant, le problème principal est que .htaccess ne fonctionne pas dans votre autre hébergement. Ceci est possible pour plusieurs raisons:

  1. Pour une raison quelconque, mod_rewrite est désactivé sur votre serveur Web Apache. Si votre hébergement est VPS ou DS, il est possible que vous ne l'ayez pas encore configuré. Quelqu'un a déjà demandé comment activer mod_rewrite, vous pouvez aller à ceci link . Si vous utilisez l'hébergement mutualisé, demandez à votre hébergeur d'activer mod.rewrite dans votre hébergeur. Vous pouvez vérifier si mod.rewrite est activé ou non dans votre hébergement après ce link . Ou vous pouvez simplement vérifier avec <?php phpinfo(); ?> et vérifier dans "Loaded Modules" que mod_rewrite existe ou non. Exemple dans cette image .
  2. Vous n'utilisez pas Apache en tant que serveur Web. Il existe d'autres serveurs Web tels que NGINX et lighttpd. Vous devriez demander à votre administrateur de serveur quel serveur Web utilisez-vous actuellement. Je n'ai aucune expérience d'utilisation de NGINX et de lighttpd, je ne peux donc pas vous aider. Mais pour autant que je sache, le code .htaccess est différent dans Apache, NGINX et lighttpd. Vous pouvez essayer de convertir le code Apache .htaccess en code nginx dans ici ou ici . Pour convertir .htaccess à lighttpd, malheureusement, je ne trouve aucun convertisseur en ligne, mais il existe un guide officiel ici et ici
  3. Eh bien, pour les conseils complets, je vais écrire ceci. Il est possible que vous ne configuriez pas codeigniter pour ne pas utiliser index.php. Dans le fichier de configuration, vide la configuration pour index_page. et donnez Base_url votre nom de domaine. $config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';

J'espère que cela efface votre confusion pourquoi votre .htaccess n'a pas fonctionné.

0
La Croix