2012-06-07 9 views

risposta

0

creo/directo pubblicazione ry, ma voglio che questo sarà servito da index.php principale dove ci sono file in questa directory.

/Pubblicazione? Page = 1 sarà servito da /index.php, /Publication/file.pdf è un file che risiede in questa stessa directory.

Apache returend 403 errore poiché/La directory di pubblicazione non ha il permesso di essere elencata. Se reindirizzate l'errore 403 a /index.php non potete catturare le variabili. Penso che la variabile REDIRECT_QUERY_STRING possa essere usata ma che potrebbe rovinare le mie classi di php.

Ho modificato la configurazione di mod_rewrite per catturare la directory che serve, si veda '#', rimossa la direttiva ErrorDocument 403, poiché non è necessaria.

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
# RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} !=/favicon.ico 
    RewriteRule ^(.*)$ index.php?path=$1 [L,QSA] 
</IfModule> 

Quello che ho opzione di configurazione

/Publication > /index.php?path=Publication 

/Publication/?page=1 > /index.php?path=Publication&page=1 

/Publication/file.pdf > /Publication/file.pdf 
+0

Dov'è il tuo '.htaccess'? Si trova all'interno della directory '/ Publication'? In tal caso, hai 'DirectorySlash Off' da qualche parte nel tuo' .htaccess'? Altrimenti, come puoi dire che '/ Publication> /index.php?path = Publication' quando per impostazione predefinita Apache reindirizzerà '/ Publication' a'/Publication/'se' DirectorySlash On' è impostato e quindi riscrivi le regole riscriverà '/ Publication /> /index.php? path = Publication /'. Ti sto chiedendo solo perché sono curioso del tuo setup e vorrei mappare diciamo '/ Publication' direttamente a' /index.php? Path = Publication' senza far reindirizzare Apache a '/ Publication /'. – tonix

0

ErrorDocument, sfortunatamente, non supporta l'espansione variabili del server. Quello che puoi provare è usare lo script locale, che invierà il reindirizzamento per te.

ErrorDocument 403 /cgi-bin/error.cgi 

nota, che lo script deve essere locale, altrimenti non sarà possibile ottenere REDIRECT_* variabili passate. E nello script stesso è possibile emettere dichiarazione di reindirizzamento:

#!/usr/bin/perl 
my $redirect_status = $ENV{'REDIRECT_STATUS'} || ''; 
my $redirect_url = $ENV{'REDIRECT_URL'} || ''; 

if($redirect_status == 403) { 
    printf("Location: http://%s%s\n", 'www.sample.com', $redirect_url); 
    printf("Status: %d\n", 302); 
} 
print "\n"; 

documentazione Vedere Apache per ulteriori delucidazioni http://httpd.apache.org/docs/2.4/custom-error.html

0

Sì! Ma solo a partire con Apache 2.4.13:

Da 2.4.13, la sintassi delle espressioni può essere utilizzato all'interno della direttiva per produrre stringhe dinamici e URL.

(da https://httpd.apache.org/docs/2.4/mod/core.html#errordocument)

La seguente configurazione comporterà un 302 risposta HTTP:

ErrorDocument 403 http://www.example.com%{REQUEST_URI} 

Nota la mancanza di una barra perché %{REQUEST_URI} inizia con una barra.