Domanda

Voglio prendere le richieste di file mancanti in una cartella specifica e li reindirizza a program.php in quella cartella.

Questo è un programma userò molto in posti diversi, e io preferirei evitare di specificare il nome della cartella nel file .htaccess.

Ho provato solo mettendo:

errordocument 404 program.php

, ma il risultato è che il browser solo viene stampato "program.php" e non esegue program.php.

Capisco perché questo sta accadendo: sulla base della documentazione all'indirizzo http://httpd.apache.org/docs/2.0/mod/core.html , di URL che non inizia con una barra o http sono interpretate come un messaggio di testo.

La domanda è: come aggirare questa limitazione di essere in grado di accedere alla stessa cartella.

È stato utile?

Soluzione

Ho finito per usare RewriteRule invece di ErrorDocument :

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

La seconda riga verifica che il file non esiste, in modo che le immagini esistenti verranno visualizzati correttamente.

Altri suggerimenti

Si desidera:

ErrorDocument 404 /program.php

Secondo il docs , "URL possono iniziare con una barra (/) per il web-percorsi locali (relativi alla DocumentRoot) ".

Hai provato un percorso (relativo o assoluto)? Se si rendono relativo, dovrebbe essere alla radice web, quale server il vostro scopo potenza.

ErrorDocument 404 /program.php

Se avete solo un piccolo numero di cartelle, probabilmente si può utilizzare:

<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>

Se questo è poco pratico, allora si dovrebbe avere un solo program.php nella radice e lo hanno rispondere in modo diverso a seconda del contenuto della variabile d'ambiente REDIRECT_URL, che è di $ _SERVER [ 'REDIRECT_URL'] in php.

Perché non hanno un'ErrorDocument gestire tutti gli errori in tutte le cartelle? Potrebbe essere molto più pulito in questo modo. È quindi possibile gestire il singolo caso con $ _SERVER [ "REQUEST_URI"] che dovrebbe contenere la richiesta originale, se non ricordo male.

Come su questo. Nel vostro percorso principale, è possibile impostare un file error.php generico. Tuttavia, tutto ciò che fa è analizzare il REQUEST_URI, controllare il percorso, vedere se c'è un error.php abitudine là, e comprendono che. Potrebbe funzionare, eh?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top