在我的共享服务器上,我试图创建一个自定义404页面。这个特殊的主机使用SHTML,我不能重写。
可以显示uri:
<!--#echo var="REQUEST_URI" -->
我可以使URI成为变量的一部分:
<!--#set var="URI" value="404.php?xxx=$REQUEST_URI" -->
我可以重定向到自己的404.php页面:
<!--#exec cgi="404.php" -->
,但我似乎不能把URI变量的值重定向。这些都不起作用:
<!--#exec cgi="404.php?xxx=$REQUEST_URI" -->
<!--#exec cgi="$URI" -->
<!--#exec cgi="URI" -->
有什么好主意吗?
摘自exec
元素的文档:
CGI脚本是给定的PATH_INFO和查询字符串(QUERY_STRING)客户的原始请求;中不能指定这些URL路径。中的脚本可以使用include变量除了标准的CGI环境。
…
应该优先使用include虚拟元素来执行cgi。特别是,如果您需要向CGI传递额外的参数程序,使用查询字符串,这不能用exec cgi,但是可以用include virtual来完成,如下所示:
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
有两种选择:
- 通过现有的
<!--#exec cgi
元素使用404.php
脚本。它应该能够立即使用相关的CGI变量(例如$_SERVER['REQUEST_URI']
)。 - 更改为使用
<!--#include virtual
元素并传入所需的变量。
我个人会选择第一个选项。