【问题标题】:How to get SSI variable REQUEST_URI without query parameters如何在没有查询参数的情况下获取 SSI 变量 REQUEST_URI
【发布时间】:2017-01-30 17:09:24
【问题描述】:

我正在尝试获取 REQUEST_URI 的路径名部分,但不包含查询参数。我需要在原始 SSI 中执行此操作,无需任何 PHP 或任何东西。

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

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

【问题讨论】:

    标签: regex ssi


    【解决方案1】:

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

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

    我不确定? 之前的\

    【讨论】:

    • 对于未来困惑的人,/ 需要被转义,就像你在声明 javascript 正则表达式一样。
    【解决方案2】:

    您可以尝试改用DOCUMENT_URI 变量:

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

    SCRIPT_NAME 似乎也可以:

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

    【讨论】:

    • 谢谢,但是&lt;!--#echo var="DOCUMENT_URI" --&gt; 返回服务器 URI,而不是用户在浏览器中键入的 URI(我们有一些 nginx 重写,这使得这些值不同)。而&lt;!--#echo var="SCRIPT_NAME" --&gt; 只返回(none)
    • 我明白了。 SCRIPT_NAME 显示 (none) 很奇怪。你试过PATH_INFO(另一个CGI变量)吗?
    【解决方案3】:

    这段代码对我有用:

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

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多