43 votes

Problèmes de .htaccess : Aucun fichier d'entrée spécifié

Quelqu'un peut-il m'aider ? J'ai l'impression de me frapper la tête contre un mur depuis plus de deux heures maintenant.

J'ai Apache 2.2.8 + PHP 5.2.6 installé sur ma machine et le .htaccess avec le code ci-dessous fonctionne bien, sans erreur.

RewriteEngine on
RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]

Le même code sur le serveur de mon fournisseur d'hébergement me donne un code d'erreur 404 et des sorties only: No input file specified. index.php est là. Je sais qu'Apache est installé (je ne trouve aucune information sur la version) et qu'ils utilisent PHP v5.2.8.

Je suis sur Windows XP 64-bit ils sont en train d'exécuter quelques Linux con PHP sur CGI/FastCGI mode. Quelqu'un peut-il suggérer ce qui pourrait être le problème ?

PS. Si c'est important, c'est pour CodeIgniter pour travailler avec des URLs amicaux.


Mise à jour1 :

mod_rewrite est installé et allumé.

Ce que j'ai remarqué, c'est que si je change en RewriteRule a /index.php?$1 (point d'interrogation au lieu de la barre oblique), il y a une boucle infinie. De toute façon, utiliser le point d'interrogation n'est pas une option car CodeIgniter (obligatoire) ne fonctionnera pas de cette manière.

La page d'accueil fonctionne également lorsque je demande directement index.php : example.com/index.php

Je commence à penser que c'est peut-être apache qui pense qu'une fois que le slash de fin est ajouté, ce n'est plus un fichier mais un dossier. Comment changer un tel comportement ?


Mise à jour 2 :

J'avais tort.
Apache traite ces URL correctement.
Demande d'accès à http://example.com/index.php/start/ (page d'accueil) ou toute autre adresse valide fonctionne.
Il semble que Apache ne transmet pas la requête pour une raison quelconque.


Mise à jour 3 :

Juste pour être clair sur ce que j'essaie d'obtenir.
Je veux réécrire les adresses comme ça :

http://www.example.com/something/ \=> http://www.example.com/index.php/something/ http://www.example.com/something/else/ \=> http://www.example.com/index.php/something/else/

0 votes

Essayez de déboguer à l'aide de la fonction de journalisation de mod_rewrite (cf. RewriteLogLevel ).

0 votes

Téléchargez un fichier PHP avec le texte : <?php phpinfo(); ?> - En accédant à ce fichier, vous obtiendrez tous les paramètres du serveur, y compris la version d'Apache et éventuellement une liste des modules Apache. Vous devrez vous assurer que mod_rewrite est installé afin d'utiliser ces fonctionnalités.

0 votes

J'ai essayé. La version d'Apache est supprimée à partir de là.

92voto

jray Points 551

Je me tapais la tête contre ça aussi. J'installe aussi Code Igniter.

Le goocher n'avait pas de RewriteBase. Voici mon .htaccess :

DirectoryIndex index.php

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|robots\.txt)

RewriteRule ^(.*)$ index.php?/$1 [L]

0 votes

Cela a répondu à mes problèmes pour la production Laravel aussi. Merci.

0 votes

Yeah boiii !!! C'est de ça que je parle ! Tu as sauvé ma peau. Pour une raison quelconque, le serveur avec lequel je travaille est très capricieux. J'avais peur de ne pas être capable de livrer quelque chose de basique.

0 votes

Juste une remarque sur votre code : robots\.txt n'est pas nécessaire, à cause de cette RewriteCond %{REQUEST_FILENAME} !-f

4voto

lesocute Points 31

Utilisateurs de Go Daddy :

  1. Connectez-vous à votre compte Go Daddy
  2. cliquez sur votre compte d'hébergement.
  3. allez dans Paramètres > Gestion des extensions de fichiers
  4. modifier les fichiers .php et .php5 pour qu'ils fonctionnent sous PHP5.2X (au lieu de PHP5.2xFastCGI)

SOLVED !!!!

4voto

kkyy Points 5540

Essayez si cela fonctionne avec un RewriteCond comme un système qui ne réécrit que tout ce qui n'est pas un fichier/dossier/lien existant :

RewriteEngine on

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

RewriteRule ^(.*)$ /index.php/$1 [R,L]

0 votes

Cela fonctionne pour la page d'accueil : exemple.com/, pas pour autre chose comme exemple.com/quelque chose/.

0 votes

Oh, maintenant je comprends... vous voulez REDIRECTER les requêtes au lieu de simplement REWRITING... (si j'ai bien compris votre mise à jour #3 :) Essayez d'ajouter [R] à la fin de la rewriterule, voir ma réponse mise à jour.

3voto

Jay Paroline Points 926

mod_rewrite est un peu trop intelligent pour son propre bien, parce qu'il essaie de comprendre quel type de redirection il devrait faire. Dans ce cas, il cherche à mod_rewrite comme si vous essayiez de rediriger vers un dossier, il cherche le dossier et ne le trouve pas, d'où l'erreur.

Edit : Pour être parfaitement clair, je pense que votre meilleure chance est de changer votre règle de réécriture en :

RewriteRule ^(.*)$ /index.php?$1 [L]

à moins qu'il y ait une raison très spécifique pour laquelle vous voulez que ce soit une barre oblique.

Edit 2 : Je vois que vous avez déjà essayé. La raison pour laquelle vous obtenez une boucle infinie est que vous avez index.php dans votre condition de réécriture. Si vous le supprimez, vous devriez être libéré de la boucle infinie.

0 votes

L'utilisation de la marque ? n'est pas une option. CodeIgniter ne fonctionnera pas de cette façon.

0voto

Tom Leys Points 10453

Il est très probable que l'administrateur de votre hôte ait désactivé la possibilité d'utiliser Rewrite dans .htaccess. Il se peut même qu'il n'ait pas installé mod_rewrite.

Envoyez-leur un courriel et demandez-leur

Puisqu'il s'agit d'un problème de configuration du serveur, vous devriez peut-être poser la question à l'adresse suivante Défaut du serveur

Modifier (puisque vous êtes sûr que le serveur est configuré correctement)

Avez-vous envisagé de marquer votre RewriteCond avec un $ de fin de ligne ?

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)

Bloquera (d'après mes connaissances limitées) toute url qui contient index.php, css, gfx ... au début d'une url. Parce que vous n'avez pas de $ à la fin de la regexp, il bloquera également toutes les urls qui continuent à partir de là...

I.e www.yourdomain.com/index.php/something n'est pas redirigé, de même pour www.yourdomain.com/js/something

Vous voulez peut-être ajouter un $, ce qui obligera l'url à se terminer immédiatement après votre regexp.

RewriteCond $1 !^(index\.php|css|gfx|js|swf|robots\.txt|favicon\.ico)$

0 votes

Non. Le mod_rewrite est activé. Ce que j'ai remarqué, c'est que si je change la RewriteRule en /index.php?$1 (point d'interrogation au lieu de la barre oblique), il y a une boucle infinie. La page d'accueil fonctionne également lorsque je demande directement index.php : exemple.com/index.php Je commence à penser que c'est peut-être apache qui pense qu'une fois que le slash de fin est ajouté, il ne s'agit plus d'un fichier mais d'un dossier. comment changer un tel comportement ?

0 votes

Re votre édition. C'est le but de ne pas avoir de $ à la fin. Pour que toutes les URLs commençant par ce qui est entre parenthèses ne soient pas réécrites en index.php (y compris index.php et index.php/quelque chose/) sinon cela ne fonctionnera pas.

0 votes

J'ai posé la question à SeverFault. Je n'ai pas eu beaucoup de chance non plus et j'ai eu moins de réponses/idées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X