是否可以读取Apache中.htaccess文件中的php $ _SESSION数组中的数据?所以说我有以下内容:
$_SESSION['foo'] = 'bar';
我可以在.htaccess做类似的事情:
RewriteRule bla.png folder/{the php session var foo}/file.png
那可能吗?
我已经有了一个可行的解决方法,但如果可行的话,它会更好.
不,至少不像你想象的那样.调用该文件是.ht
access
因为它们是"分布式配置文件",当然配置&& 访问处理必须首先发生 - 因此,您无法获得"PHP会话变量",因为它只是在处理之后才会出现.htaccess
我将在下面向您展示一些解决方法,但在此之前 - 您应该注意这一点:
这真的有必要吗? - 建议的解决方案如果你只想重新定位文件路径/由登录用户 - .htaccess不是方式 - 使用bla.php
地址然后在PHP文件中做重定向 - 这样的事情:
但是,如果您无法更改源URL,您首先必须重定向bla.png
到bla.php
但我猜您知道如何做到这一点:-)
在使用MPV/MVC模型的框架中,通常存在用于"路由"的脚本 - 例如这个.
您可以选择使用此脚本创建一个"php-router",添加一些其他依赖PHP的重定向,同时使用if/elseif/else
或case
选择将要发生的重定向 - 重定向将在哪里.
你可能正在使用会话 - 所以为什么不直接在PHP中生成url:$url = "example.com/bla.png?foo=".$_SESSION['foo'];
+ regexp in .htaccess
或者甚至:
$url = "example.com/folder/".$_SESSION['foo']."/file.png";
无论如何我猜你是重定向因为你不能(出于某种原因)这样做.:-)
如果你仍然相信你必须在.htaccess文件中执行此操作,这里有一些解决方法
在现代,cookie通常是可用的,因此如果您"信任"您的客户端的cookie,您可以基于HTTP_COOKIE
服务器变量制定重定向规则- 假设您之前存储了名为" foo
"的cookie :
RewriteCond %{HTTP_COOKIE} ^(.*)foo=([-_a-zA-Z0-9]+)(.*)$ [NC] RewriteRule ^bla.png$ /folder/%2/file.png [R=307,NC,L] #possibly use 302 if you like dinosaurs
正如您所看到的,技巧是HTTP_COOKIE
为某些条件创建条件检查服务器变量.它基本上说:
是否有名为"foo"的COOKIE仅包含" - ,_,小写或大写字母或数字"?
如果是这样 - 重定向example.com/bla.png到example.com/folder/CURRENT_FOO_VALUE/file.png
[flags]:307重定向(R = 307),不介意字母大小写(NC),不要申请其他规则(L)
好的一点是HTTP_COOKIE
服务器变量的结构是这样的:
name=value; name2=value2
HTTP_SESSION
使用mod_session 读取环境变量的会话有关如何将会话读入env的更多信息,请参阅mod_session的apache手册HTTP_SESSION
.变量.那么方法将与"COOKIE-workaround"相同.
RewriteMap
@Chris建议的指令读取它但是你会再次以某种方式检测出哪个'foo'可能SSL_SESSION_ID
或其他一些$_GET/$_POST
参数?
我不知道它可能.
但我可以想到一些涉及重写PHP脚本的变通方法.