在 Apache 中是否可能发生这样的事情...(即重定向到外部 url,其路径导致传递 403 错误)
ErrorDocument 403 http://www.sample.com/{{REDIRECT_URL}}
在 Apache 中是否可能发生这样的事情...(即重定向到外部 url,其路径导致传递 403 错误)
ErrorDocument 403 http://www.sample.com/{{REDIRECT_URL}}
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
我创建 /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
是的!但仅从 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}
开头。
我认为这是可能的,因为文档说.. http://httpd.apache.org/docs/2.0/mod/core.html#errordocument
也许是这样:
ErrorDocument 403 http://www.sample.com/?do=somthing