我正在尝试使用一些重写规则构建一个.htaccess文件,并且想知道在处理我的请求时实际包含的几个变量。有没有看到Apache处理请求时它们的值是什么?
E.g。打印%{HTTP_USER_AGENT}
答案 0 :(得分:16)
不确定。创建这种.php文件(echo.php):
<?php
phpinfo(INFO_VARIABLES);
?>
在.htaccess中添加此规则:
RewriteEngine On
RewriteCond %{REQUEST_URI} !echo.php
RewriteRule .* echo.php?ua=%{HTTP_USER_AGENT}&https=%{HTTPS} [L]
如有必要,添加更多参数。
现在调用任何URL并检查输出(GET参数应该在表的顶部)。
但是,TBH,几乎所有这些信息都是由Apache收到的,无论如何都可供PHP使用:查看$_SERVER
。
答案 1 :(得分:1)
是的,可以通过.htaccess输出请求变量。
您可以通过“入侵”自定义错误状态消息来做到这一点。只要将AllowOverride设置为FileInfo,就可以在.htaccess文件中设置并触发一个custom error response,并在输出中带有所需的变量:
ErrorDocument 404 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=404]
作为参考,Apache文档中提供了list of available variables。
有趣的是,您不限于将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>
答案 2 :(得分:0)
在不改变路由行为(无 404 或重定向)的情况下实现此目的的另一种方法是将所需值作为响应标头发送。
RewriteRule .* - [ENV=REQUEST_URI:%{REQUEST_URI}]
Header set x-request-uri %{REQUEST_URI}e
然后你可以看到带有curl -I
$ curl -I http://localhost:8095/api/my/request/uri
...
x-request-uri: /api/my/request/uri
您的路线仍将前往它应该去的地方,但您会收到一个包含您想要的值的响应标头