web-dev-qa-db-fra.com

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

Quelqu'un peut il m'aider avec ça? J'ai l'impression de me cogner la tête contre un mur depuis plus de 2 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, aucune 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 mon serveur de fournisseur d'hébergement me donne un code d'erreur 404 et génère only: No input file specified. index.php est là. Je sais qu'ils ont installé Apache (ne peuvent trouver d'informations sur la version nulle part) et ils exécutent PHP v5.2.8.

Je suis dessus Windows XP 64-bit, ils exécutent un Linux avec PHP dans CGI/FastCGI mode. Quelqu'un peut-il suggérer quel pourrait être le problème?

PS. si c'est important, c'est que CodeIgniter fonctionne avec des URL conviviales.


Update1:

mod_rewrite est installé et activé.

Ce que j'ai remarqué, c'est que si je change de RewriteRule en /index.php?$1 (point d'interrogation au lieu d'une barre oblique), il entre dans une boucle infinie. Quoi qu'il en soit, l'utilisation du point d'interrogation n'est pas une option car CodeIgniter (obligatoire) ne fonctionnera pas de cette façon.

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

Je commence à penser que cela pourrait être Apache en pensant qu'une fois la barre oblique de fin ajoutée, ce n'est plus un fichier mais un dossier. comment changer un tel comportement?


Mise à jour 2:

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


Mise à jour 3:

Juste pour être clair sur ce que j'essaie de réaliser.
Je veux réécrire des 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/

41
Michal M

Je me battais aussi la tête contre cela. J'installe également Code Igniter.

Le goocher n'était pas 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]
85
jray

Le problème

J'ai rencontré un problème similaire tout à l'heure et malheureusement aucune des réponses dans ce fil n'a aidé:

Zend Framework donnait "Aucun fichier d'entrée spécifié.", Mais:

  • La RewriteBase par défaut était très bien, et l'ajout de RewriteBase / n'a pas aidé
  • C'est un serveur d'hébergement partagé et seul FastCGI est disponible (pas de possibilité de passer à SuPHP)
  • AcceptPathInfo était activé
  • Il n'y avait aucun problème avec la réécriture d'URL en général sur le serveur

La réponse est donc venue du site suivant: https://ellislab.com/forums/viewthread/55620/P15 [lien mort] (même si l'hôte n'est pas DreamHost).

La solution

Apparemment, tout ce que vous devez faire est de remplacer cette ligne:

RewriteRule ^(.*)$ index.php/$1

Avec ça:

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

Problème résolu.

27
Ynhockey

Cela a fonctionné pour moi:

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

Après index.php, le point d'interrogation est important!

9
A.G.THAMAYS

Go Daddy Users:

  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. changer .php et .php5 pour fonctionner sous PHP5.2X (au lieu de PHP5.2xFastCGI)

RESOLU !!!!

4
lesocute

Essayez si cela fonctionne avec un RewriteCond plus simple; comme celui qui réécrit uniquement 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]
4
kkyy

mod_rewrite est un peu trop intelligent pour son propre bien, car il essaie de savoir quel type de redirection il doit faire. Dans ce cas, il semble mod_rewrite comme si vous essayez de rediriger vers un dossier, il recherche donc le dossier et ne le trouve pas, d'où l'erreur.

Edit: Juste pour être parfaitement clair, je pense que votre meilleur pari est de changer votre règle de réécriture en:

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

à moins qu'il n'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é cela. La raison pour laquelle vous obtenez une boucle infinie est parce que vous avez index.php dans votre condition de réécriture. Si vous supprimez cela, vous devriez être libre de la boucle infinie.

3
Jay Paroline

.htaccess pour Live Server: -

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]

.htaccess pour Localhost: -

RewriteEngine On
#RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1
1
Parimal Nakrani

Vous utilisez peut-être Nginx, pas un Apache. Le message d'erreur sera le même.

faire écho à vos données de serveur pour être sûr.

echo $_SERVER["SERVER_SOFTWARE"];
0
Yevgeniy Afanasyev

Il est très probable que l'administrateur de votre hôte ait désactivé la possibilité d'utiliser la réécriture dans .htaccess. Ils n'ont peut-être même pas installé mod_rewrite.

Envoyez-leur un e-mail et demandez

Comme il s'agit d'un problème de configuration du serveur, vous devriez peut-être demander à Server Fault

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

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

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

Will (basé sur mes connaissances limitées) bloquera toute URL contenant index.php, css, gfx ... au début d'une URL. Parce que vous n'avez pas de $ à la fin de l'expression rationnelle, il bloquera également toutes les URL qui continueront à partir de là ...

C'est à dire www.yourdomain.com/index.php/something n'est pas redirigé, pareil avec www.yourdomain.com/js/something

Peut-être que vous voulez ajouter un $, ce qui nécessitera que l'URL se termine immédiatement après votre expression régulière.

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

Étant donné que cette question semble attirer beaucoup d'attention, je voudrais proposer une autre réponse pour les personnes ayant rencontré le même problème et ne pouvant pas le résoudre à l'aide des réponses existantes. J'étais moi-même une de ces personnes jusqu'à il y a cinq minutes.

Toujours, je veux dire ( toujours vérifiez les journaux de votre serveur car ils pourraient vous présenter des informations utiles.


Après avoir vérifié les journaux de mon serveur (Apache2.4), j'ai découvert que open_basedir était à l'origine du problème:

mod_fcgid: stderr: PHP Avertissement: inconnu: restriction open_basedir en vigueur. Le fichier (/data/sites/domain/public/index.php) ne se trouve pas dans le ou les chemins autorisés: (/ usr/local/lib/php:/usr/local/bin:/data/sites/domain/http-docs) dans Inconnu sur la ligne 0

mod_fcgid: stderr: PHP Avertissement: inconnu: échec d'ouverture du flux: opération non autorisée dans Inconnu sur la ligne 0

Dans ce cas, open_basedir n'a pas pu gérer un lien symbolique que j'ai créé car il pointe vers l'extérieur des paramètres open_basedir. Élargissez le paramètre open_basedir au nouvel emplacement ou déplacez les fichiers requis vers l'intérieur de n'importe quel répertoire autorisé.

0
halfpastfour.am

Voici une fois que j'ai attrapé no input file specified droit à l'action:

Cela provoque:

RewriteRule ^(.*\.swf)$  redirect_php.php/?a=1 [last]

Cela l'a corrigé:

RewriteRule ^(.*\.swf)$  redirect_php.php?a=1 [last]

noter la / avant la requête ?

Cela semble vraiment lié à AcceptPathInfo, qui concerne la possibilité de lire les chemins après les noms de fichiers:

http://domain.com/file.php/tricky_path/?regular_query_stuff
0
Johan