如何在没有查询参数的情况下获取 SSI 变量 REQUEST_URI

How to get SSI variable REQUEST_URI without query parameters

我试图在没有查询参数的情况下获取 REQUEST_URI 的路径名部分。我需要在原始 SSI 中执行此操作,没有任何 PHP 或任何东西。

如果我做类似 <!--#echo var="REQUEST_URI" --> 的事情,那将输出路径名和查询参数,所以如果浏览器 URL 显示 http://example.com/foo.html?bar,那将 return /foo.html?bar。但我只需要 return /foo.html。有没有办法直接在 echo 语句中执行此操作?

注意:它只需要使用请求的uri。服务器上的实际文件路径非常不同,我无法显示这些。

您可以尝试使用 DOCUMENT_URI 变量:

<!--#echo var="DOCUMENT_URI" -->

SCRIPT_NAME 似乎也有效:

<!--#echo var="SCRIPT_NAME" --> 

我周围没有 运行 nginxSSI,所以我只是在猜测。 但也许你可以尝试使用正则表达式来提取你想要的东西。 也许是这样的:

<!--# if expr="$REQUEST_URI = /(.+)\?.*/" -->
    <!--# echo var="1" -->
<!--# endif -->

我不确定 ? 之前的 \

这段代码对我有用:

<!--#if expr="$REQUEST_URI = /([^?]+)\?.*/" -->
    <!--#set var="URL_WITHOUT_QUERY_STRING" value="" -->
    <!--#echo var='URL_WITHOUT_QUERY_STRING' -->
<!--#endif -->