如何在.htaccess中将目录重写为cookie值?

az31mfrm  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(140)
$val = substr(str_shuffle(str_repeat("abcdefghijklmnopqrstuvwxyz0123456789", 12)), 0, 12);
setcookie('sub' , $val , time() + (86400) , '/');

example.com/folder/file.php应重写为$_COOKIE['sub']的值,例如example.com/6df1fcb7aba6/file.php
我怎么能那样做呢?
我试过这个:

RewriteCond %{HTTP_COOKIE} !^.*sub.*$ [NC]
RewriteRule %{HTTP_COOKIE} !^.*sub.*$/(.*) folder/$1

,但不起作用

eoigrqb6

eoigrqb61#

您可以使用mod_rewrite在根.htaccess文件中执行以下操作:

RewriteEngine On

RewriteCond %{HTTP_COOKIE} (?:^|;|\s)sub=([a-z0-9]{12})(?:$|;)
RewriteRule ^folder/(file\.php)$ %1/$1 [L]

上面说:
1.给定/folder/file.php的请求

  1. cookie sub存在一个12字符的字母数字(小写)值。
    1.将请求重写为/<sub-cookie-value>/file.php
    %1反向指涉包含sub Cookie的值,只要它符合12个字符英数字元(小写)值的准则。
    $1反向引用只包含从RewriteRule * 模式 * 捕获的file.php
RewriteCond %{HTTP_COOKIE} !^.*sub.*$ [NC]
RewriteRule %{HTTP_COOKIE} !^.*sub.*$/(.*) folder/$1

RewriteRulepattern(第一个参数)是一个正则表达式,它与请求的URL路径匹配,因此%{HTTP_COOKIE}(被视为文字字符串)永远不会匹配,因此该规则不执行任何操作。但是,第三个参数(flags)的语法完全无效,因此可能导致500内部服务器错误(“bad flags delimiter”)。
RewriteCond指令正在检查字符串sub * 没有 * 出现在Cookie HTTP请求头中的任何位置,这不是您想要做的。您需要检查sub是否存在 * 并 * 提取该值。

相关问题