我目前正在开发一个网络地图应用程序。我使用Apache 2.4,PHP,Javascript和Dojo(用于映射的javascript库)。 Dojo正在向webservices发出请求(托管在https:// host / server / rest / services / ...并由我公司的其他部门管理)。但是为了访问这些Web服务,需要使用Basic进行身份验证。
因为他们没有像他们那样实现令牌身份验证(我们可以使用dojo),所以当我们连接到应用程序以访问webservices中的数据时会出现一个弹出窗口。我想配置Apache(我的 httpd.conf )以避免为我们的用户弹出这个弹出窗口,并设置了一个正确的Authorization标头,该标头将随Dojo对我们的webservices的每个请求一起发送。
我的第一个想法是使用 headers_module
设置标头RequestHeader set Authorization "Basic ****"
然后使用 rewrite_module 和我在网上找到的内容:
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)$ [NC]
RewriteRule /.* - [E=HTTP_AUTHORIZATION:%1]
但它似乎不起作用,因为如果我检查:
$headers = apache_request_headers();
$server = $_SERVER["HTTP_AUTHORIZATION"];
$ headers 包含我想要的内容,但 $ server 不包含
所以我继续前进并决定选择 setenvif_module ,这似乎是一个很好的解决方案。我现在有:
RequestHeader set Authorization "Basic ****"
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
即使我不明白 $ 1 的含义及其作用。
为了进一步解释,我的应用程序有一个登录页面index.php,其中没有发出主机/服务器/ rest / services请求,HTTP_AUTORIZATION看起来是空的。一旦我登录到我的页面application.php,所有的请求都被发出,HTTP_AUTHORIZATION似乎充满了我想要的东西" Basic ****",但是出现了一个空的REDIRECT_HTTP_AUTHORIZATION并且弹出来自仍然会出现要求用户和密码的网络服务。
你知道我错过了什么或者做错了什么吗? 谢谢你的帮助。