是否可以在.htaccess文件中输出任何或所有可用变量?

Ste*_*eld 12 apache .htaccess

我正在尝试使用一些重写规则构建一个.htaccess文件,并且想知道处理我的请求时实际包含的几个变量.有没有看到Apache处理请求时它们的值是什么?

例如打印内容 %{HTTP_USER_AGENT}

Laz*_*One 19

当然.创建这种.php文件(echo.php):

<?php
phpinfo(INFO_VARIABLES);
?>
Run Code Online (Sandbox Code Playgroud)

在.htaccess中添加此规则:

RewriteEngine On

RewriteCond %{REQUEST_URI} !echo.php
RewriteRule .* echo.php?ua=%{HTTP_USER_AGENT}&https=%{HTTPS} [L]
Run Code Online (Sandbox Code Playgroud)

如有必要,添加更多参数.

现在调用任何URL并检查输出(GET参数应该在表的顶部).

但是,TBH,几乎所有这些信息都是由Apache接收的,无论如何都可供PHP使用:看看$_SERVER.


Pet*_*erA 5

是的,可以通过 .htaccess 输出请求变量。

您可以通过“破解”自定义错误状态消息来实现。只要您将 AllowOverride 设置为 FileInfo,您就可以在 .htaccess 文件中设置并触发自定义错误响应,并在输出中使用所需的变量:

ErrorDocument 404 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=404]
Run Code Online (Sandbox Code Playgroud)

作为参考,Apache 文档中提供了可用变量列表

有趣的是,您不仅限于使用 400 或 500 个错误状态作为错误响应覆盖。您甚至可以覆盖状态 200“ErrorDocument”。这意味着您可以做的不仅仅是输出变量来使用这个技巧进行故障排除。<If>在它周围放一个标签,你就有了一个文件!

<If "%{REQUEST_URI} =~ /compliance.html$/">
    ErrorDocument 200 "<html><body><h1>Yes, Max. Those were geeks.</h1></body>"
    RewriteRule ^ - [L,R=200]   
</If>
Run Code Online (Sandbox Code Playgroud)