7

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

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

4 回答 4

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

有关更多见解,请参阅 Apache 文档http://httpd.apache.org/docs/2.4/custom-error.html

于 2015-02-17T15:01:27.907 回答
0

我创建 /Publication 目录,但我希望这将由主 index.php 提供服务,因为该目录中有文件。

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

Apache 返回 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
于 2014-02-27T09:56:20.410 回答
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}开头。

于 2017-01-16T19:44:14.377 回答
-1

我认为这是可能的,因为文档说.. http://httpd.apache.org/docs/2.0/mod/core.html#errordocument

也许是这样:

ErrorDocument 403 http://www.sample.com/?do=somthing
于 2012-06-07T20:45:39.373 回答