2009-11-03 4 views
4

Je veux recevoir les demandes de fichiers manquants dans un dossier spécifique et les rediriger vers program.php dans ce dossier.Comment utiliser errordocument pour rediriger vers un fichier php dans le même dossier?

Ceci est un programme que j'utiliserai beaucoup à différents endroits, et je préférerais éviter de spécifier le nom du dossier dans le fichier htaccess.

J'ai essayé simplement mettre:

errordocument 404 program.php

mais le résultat est que le navigateur seulement imprime « program.php » et ne pas exécuter program.php.

Je comprends pourquoi ce qui se passe: en fonction de la documentation à http://httpd.apache.org/docs/2.0/mod/core.html, URL qui ne commence pas par une barre oblique ou http sont interprétées comme un message texte.

La question est comment contourner cette limitation pour pouvoir accéder au même dossier.

Répondre

3

Je fini par utiliser rewriterule au lieu de ErrorDocument:

 
rewriteengine on 
rewritecond %{request_filename} !-f 
rewriterule ^(.+).jpg$ program.php?i=$1.jpg [L] 

La deuxième ligne vérifie que le fichier n'existe pas, de sorte que les images existantes seront affichés correctement. Pourquoi ne pas avoir un ErrorDocument gérer toutes les erreurs dans tous les dossiers?

+0

Le problème avec ceci est qu'il ne renverra pas un code d'état 404, ainsi les moteurs de recherche et les outils de vérificateur de lien etc.ne sauront pas qu'ils ont atteint une page qui ne devrait pas exister. – rjmunro

+0

Cela est facilement résolu dans le programme.php dans le style d'un paramètre "& sendHeader = 404". –

+0

Notez que cette solution n'est pas enregistrée en tant que 404 par votre serveur Web. – Gumbo

0

Avez-vous essayé un chemin (relatif ou absolu)? Si vous le faites par rapport, il devrait être à la racine Web, ce qui pourrait servir votre but.

ErrorDocument 404 /program.php 
+0

Voir mon commentaire pour l'autre réponse. –

2

Vous voulez:

ErrorDocument 404 /program.php 

Selon le docs, "URL peuvent commencer par une barre oblique (/) pour les chemins web locaux (par rapport au DocumentRoot)."

+1

L'utilisation de /program.php ne fonctionnera pas car le programme est dans /somefolder/program.php, et je ne peux pas prédire le nom de "somefolder". Le fichier .htaccess est dans "somefolder" avec program.php. –

0

Si vous avez seulement un petit nombre de dossiers, vous pouvez probablement utiliser:

<Directory /path/a> 
    ErrorDocument 404 /a/program.php 
</Directory> 
<Directory /path/b> 
    ErrorDocument 404 /b/program.php 
</Directory> 
<Directory /path/c> 
    ErrorDocument 404 /c/program.php 
</Directory> 

Si cela est impossible, alors vous ne devriez avoir un program.php à la racine et l'ont réagit différemment selon le contenu de la variable d'environnement REDIRECT_URL, qui est $ _SERVER ['REDIRECT_URL'] en php.

0

Ça pourrait être beaucoup plus propre de cette façon. Vous pouvez alors gérer le cas individuel en utilisant $ _SERVER ["REQUEST_URI"] qui devrait contenir la requête d'origine si je me souviens bien.

+0

Le problème est que c'est un programme que je veux utiliser dans beaucoup d'endroits, et je ne veux pas modifier la structure de l'ensemble du site à chaque fois. Je veux vraiment le faire fonctionner dans un dossier isolé, sans affecter ce qui est dehors. –

0

Que diriez-vous de ceci. Dans votre chemin d'accès racine, vous configurez un fichier error.php générique. Cependant, tout ce qu'il fait est d'analyser le REQUEST_URI, vérifier le chemin, voir s'il y a un custom.php personnalisé, et l'inclure. Ça pourrait marcher, hein?

Questions connexes