这些重写规则似乎不起作用。这是不可能还是我错过了什么
有问题的规则是第二个,请注意后面引用%1
RewriteCond %{REQUEST_URI} ^/([a-zA-Z\.]+)/.*$ [NC]
RewriteCond %{HTTP_COOKIE} route_controller_%1=([^;]+) [NC]
RewriteRule ^(.*)$ http://example2.com/%1/_/$1 [L]
这是我期待发生的事情。给定URL
http://example.com/abc/home
第一条规则应将abc存储在%1中 我想要一个名为route_controller_abc的cookie的第二个规则,如果找到的话 然后第三条规则将重新加入
http://example2.com/thevalueofthecookie/_/home
但是seconf规则似乎没有使用%1反向引用。
任何想法?
答案 0 :(得分:2)
原因是字符串替换仅发生在cond的第一个参数而不是其rexexp上。您必须使用\1
等
您还可以在规则regexp中选择目录,因为执行顺序是规则regexp,cond1,cond2,...规则替换。例如。 ^(*.?)/.*$
的{{1}}会将abc/home
设置为$1
,将$ 0设置为abc
。因此我会尝试类似的事情:
abc/home
请注意,控制器现在位于%2中,因为%1用于绑定cond regexp中的目录。
希望这有助于并回答你的直接问题.Hovever,我会因使用未经验证的cookie进行重定向而有点抽搐。如果我这样做,我会收紧参数RewriteCond $1:%{HTTP_COOKIE} ^(.*?):.*\broute_controller_\1=([^;]+) [NC]
RewriteRule ^(*.?)/.*$ http://example2.com/%2/_/$0 [L]
的验证或将其移到一个小的PHP重定向器脚本并在那里进行验证: - )