重写规则中的apache mod_session

时间:2015-05-06 14:36:27

标签: apache mod-rewrite

我想阅读HTTP_SESSION创建的环境变量mod_session的内容,并根据存储在其中的用户重写一些网址。但似乎我无法访问它,即使我可以在CGI脚本中看到内容。

我有一个登录表单:

cat /var/www/login/login.html

<head>
    <meta charset="utf-8">
</head>
<body>
    <form method="POST" action="">
        Username: <input type="text" name="httpd_username" value="" />
        Password: <input type="password" name="httpd_password" value="" />
        <input type="submit" name="login" value="Login" />
    </form>

</body>
</html>

我创建了一个testuser:

htpasswd -c /etc/apache2/passwords testuser

和相应的apache配置:

<VirtualHost *:80>
        ServerName simon.test
        DocumentRoot /var/www/

        RewriteEngine On

        LogLevel debug session:trace8 session_cookie:trace8 headers:trace8 rewrite:trace8

        Session On
        SessionCookieName session path=/;domain=simon.test;httponly;
        SessionEnv On

        <Location /login/>
                Require all granted
        </Location>

        <LocationMatch ^/(sp)/(.+)$>
                ErrorDocument 401 "/login/login.html"

                AuthType form
                AuthName "authenticationform"

                AuthFormProvider file
                AuthUserFile /etc/apache2/passwords

                AuthName "test"

                AddHandler cgi-script .sh
                Options +ExecCGI


                SessionEnv On

                RewriteRule .* - [E=test:thisworks]
                RewriteRule .* - [E=THE_SAVED_SESSION:%{ENV=HTTP_SESSION}]

                Require valid-user
        </LocationMatch>
</VirtualHost>
/var/www/sp/i.sh

中的

#!/bin/bash

echo "Content-type: text/plain"
echo ""


env

exit 0

当我转到http://simon.test/sp/i.sh时,会显示登录表单,登录工作正常,但THE_SAVED_SESSION环境变量从未显示过。即使在apache重写调试日志中它也是空的,但CGI脚本的输出正确显示其内容。

有人知道为什么,以及我如何访问该变量的内容?

1 个答案:

答案 0 :(得分:0)

RewriteRule .* - [E=THE_SAVED_SESSION:%{LA-U:ENV:HTTP_SESSION}]

做了这个伎俩。