2012-06-07 8 views

Antwort

0

I/Veröffentlichung directo erstellen ry, aber ich will, dass dies von main index.php serviert wird, wo es Dateien in diesem Verzeichnis gibt.

/Die Veröffentlichung? Page = 1 wird von /index.php geliefert, /Publication/file.pdf ist eine Datei, die sich in diesem Verzeichnis befindet.

Apache returend 403 Fehler seit/Publikationsverzeichnis hat keine Berechtigung, aufgelistet zu werden. Wenn Sie den Fehler 403 in /index.php umleiten, können Sie keine Variablen abfangen. Ich denke, REDIRECT_QUERY_STRING Variable kann verwendet werden, aber das würde meine PHP-Klassen durcheinander bringen.

Ich habe mod_rewrite Config geändert, um Directory Serving zu fangen, siehe '#', entfernte ErrorDocument 403 Direktive, da keine Notwendigkeit.

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

Was ich

/Publication > /index.php?path=Publication 

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

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

Wo ist dein '.htaccess'? Befindet es sich im '/ Publication'-Verzeichnis? Wenn ja, hast du 'DirectorySlash Off' irgendwo in deinem' .htaccess'? Wie kannst du das sonst sagen?/Publikation> /index.php?path = Publication ', wenn Apache standardmäßig'/Publication' auf '/ Publication /' umleitet, wenn 'DirectorySlash On' gesetzt ist und dann die Regeln umschreiben '/ Publication /> /index.php? path = Publication/'. Ich frage Sie nur, weil ich neugierig auf Ihr Setup bin und ich würde sagen wollen, sagen wir '/ Publication' direkt zu' /index.php? Path = Publication', ohne Apache Redirect zu '/ Publication /'. – tonix

0

ErrorDocument Konfigurationsoption haben, leider, nicht unterstützt Server-Variablen Expansion. Was Sie versuchen können, ist lokale Skript, das Redirect für Sie ausgeben wird.

ErrorDocument 403 /cgi-bin/error.cgi 

Hinweis, hat das Skript lokal sein, sonst werden Sie bekommen nicht REDIRECT_* Variablen übergeben. Und selbst in dem Skript können Sie Redirect-Anweisung ausgeben:

#!/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"; 

Siehe Apache-Dokumentation für weitere Einblicke http://httpd.apache.org/docs/2.4/custom-error.html

0

Ja! Aber beginnen nur mit Apache 2.4.13:

Von 2.4.13, Ausdruck Syntax kann in der Richtlinie erzeugen dynamische Strings und URLs verwendet werden.

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

Die folgende Konfiguration in einer HTTP-302-Antwort führen wird:

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

Hinweis das Fehlen eines slash weil %{REQUEST_URI} beginnt mit einem Schrägstrich.