2012-10-06 4 views
2

Je travaille sur un projet open source. Je ne sais pas dans quel répertoire ce projet sera installé sur l'utilisateur final. J'ai besoin d'ajouter des règles au fichier .htaccess créé pour mon projet, de sorte que 404 et d'autres pointent vers un fichier spécifique, à la racine de mon projet. Le script d'installation est appelé dans un dossier appelé "setup", en relation avec le dossier racine tel que root/setup/index.php.Pointage .htaccess dans un fichier

Le chemin que j'utilise pour diriger 404 du .htaccess de la racine à errorcode.php (également dans le dossier racine) est la suivante:

$installURL = "http://" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['SCRIPT_NAME']); 
$save= $installURL; 
$str = str_replace('/setup', '', $save); //remove /setup/ 
$installURL= $str ; 

J'ouvre le fichier .htaccess et faire mes règles comme ceci:

$fp = fopen("../.htaccess", "a"); 
fwrite($fp, "\n\n# ErrorDocuments \n"); 
fwrite($fp, "ErrorDocument 400 ". $installURL."/errorcode.php?error=400 \n"); 

Il existe une liste de règles pour tous les 400 en-têtes HTTP.

Cela a fonctionné pour moi depuis environ un mois maintenant. Aujourd'hui, j'ai commencé à obtenir des erreurs de serveur et le fichier journal dit le texte suivant:

[Thu Oct 04 11:56:59 2012] [notice] cannot use a full URL in a 401 ErrorDocument directive --- ignoring! 
[Thu Oct 04 11:56:59 2012] [alert] [client 127.0.0.1] C:/wamp/www/Project-BlackHawk/.htaccess: Unsupported HTTP response code 428, referer: http://localhost/Project-BlackHawk/setup/index.php 

Ma question est, suis-je censé utiliser quelque chose comme ça pour le chemin de ErrorDocument:

$installURL = dirname($_SERVER['SCRIPT_NAME']); 
$save= $installURL; 
$str = str_replace('/setup', '', $save); //remove /setup/ 
$installURL= $str ; 

Répondre

2

Il semble comme si vous deviez supprimer la pièce http://localhost de votre directive ErrorDocument. Donc, $_SERVER['SCRIPT_NAME'] ferait probablement cela pour vous, de même que $_SERVER['REQUEST_URI'].

+0

Donc, comme les 4 dernières lignes de ma question? – chriscct7

+0

@ chriscct7 Oui, cela fonctionne. –

Questions connexes