具有变量的Apache ErrorDocument外部重定向

时间:2012-06-07 20:13:57

标签: apache errordocument

这样的事情在Apache中是可能的......(即重定向到外部URL,导致传递403错误的路径)

ErrorDocument 403 http://www.sample.com/{{REDIRECT_URL}}

4 个答案:

答案 0 :(得分:1)

不幸的是,

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

有关更多见解http://httpd.apache.org/docs/2.4/custom-error.html

,请参阅Apache文档

答案 1 :(得分:0)

我创建/发布目录,但我想这将由主index.php提供,其中此目录中有文件。

/ Publication?page = 1将由/index.php提供,/ Publication / file.pdf是一个驻留在此目录中的文件。

Apache returend 403错误,因为/ Publication目录没有列出的权限。当您将403错误重定向到/index.php时,您无法捕获变量。我认为可以使用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

答案 2 :(得分: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}以斜杠开头。

答案 3 :(得分:-1)

我认为可以像医生说的那样...... http://httpd.apache.org/docs/2.0/mod/core.html#errordocument

也许是这样的:

ErrorDocument 403 http://www.sample.com/?do=somthing