这样的事情在Apache中是可能的......(即重定向到外部URL,导致传递403错误的路径)
ErrorDocument 403 http://www.sample.com/{{REDIRECT_URL}}
答案 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";
,请参阅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