2012-06-07 2 views

ответ

0

Я создаю/Directo публикации ry, но я хочу, чтобы это будет обслуживаться главным index.php, где есть файл в этом каталоге.

/Publication? Page = 1 будет обслуживаться /index.php, /Publication/file.pdf - это файл, находящийся в этом самом каталоге.

Ошибка Apache returend 403, поскольку каталог/публикация не имеет права на включение в список. Вы перенаправляете ошибку 403 в /index.php, вы не можете перехватывать переменные catch. Я думаю, что можно использовать переменную REDIRECT_QUERY_STRING, но это может испортить мои php-классы.

Я изменил конфигурацию mod_rewrite, чтобы поймать службу каталогов, см. «#», Удаленную директиву ErrorDocument 403, так как нет необходимости.

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

Что у меня есть вариант конфигурации

/Publication > /index.php?path=Publication 

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

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

Где ваш '.htaccess'? Он находится внутри директории '/ Publication'? Если это так, у вас есть 'DirectorySlash Off' где-то в вашем' .htaccess'? В противном случае, как вы можете сказать, что '/ Publication> /index.php?path = Publication', когда по умолчанию Apache будет перенаправлять '/ Publication' на'/Publication/', если задано' DirectorySlash On', а затем переписать правила переписывают '/ Publication /> /index.php? path = Publication /'. Я прошу вас только потому, что мне интересно узнать о вашей настройке, и я бы хотел, чтобы карта, скажем, '/ Publication', была непосредственно на' /index.php? Path = Publication', не позволяя Apache перенаправлять на '/ Publication /'. – tonix

0

ErrorDocument, к сожалению, не поддерживает расширение серверных переменных. Вы можете попробовать использовать локальный скрипт, который выдаст вам перенаправление.

ErrorDocument 403 /cgi-bin/error.cgi 

Обратите внимание, что сценарий должен быть локальным, иначе вы не получите REDIRECT_* переменные, передаваемые. И в самом скрипте вы можете оформить перенаправлять заявление:

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

См Apache документацию для более прозрений http://httpd.apache.org/docs/2.4/custom-error.html

0

Да! Но только начиная с Apache 2.4.13:

С 2.4.13, синтаксис выражения можно использовать внутри директивы производства динамических строк и URL.

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

следующая конфигурация приведет к HTTP 302 ответа:

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

Обратите внимание на отсутствие косой черты, потому что %{REQUEST_URI} начинается с косой черты.