如何使用.htaccess在多次重写中获取引用变量
这些重写规则似乎不起作用。这是不可能的还是我遗漏了什么 有问题的规则是第二个,请注意反向引用%1如何使用.htaccess在多次重写中获取引用变量,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,这些重写规则似乎不起作用。这是不可能的还是我遗漏了什么 有问题的规则是第二个,请注意反向引用%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
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反向引用
有什么想法吗?原因是字符串替换只发生在cond的第一个参数中,而不发生在它的rexexp中。您必须使用
\1
等来模拟regexp中的参数
您还可以选择规则regexp中的目录,因为执行顺序是规则regexp,cond1,cond2,。。。规则替换。例如,^(*.?)/.*$
对于abc/home
将$1
设置为abc
,将$0设置为abc/home
。因此,我会尝试以下方法:
RewriteCond $1:%{HTTP_COOKIE} ^(.*?):.*\broute_controller_\1=([^;]+) [NC]
RewriteRule ^(*.?)/.*$ http://example2.com/%2/_/$0 [L]
请注意,控制器现在位于%2中,因为%1用于绑定cond regexp中的目录
希望这有助于回答您的直接问题。Hover,如果使用这种未经验证的cookies进行重定向,我会有点紧张。如果我这样做,我要么加强参数
([^;]+)
的验证,要么将其移动到一个小的PHP重定向器脚本,并在那里进行验证:-)好的,我会尝试一下。关于用于重定向的未验证cookie。我计划让我的应用程序在example2.com上进行验证。我遗漏了什么吗?不,使用应用程序来做这件事是可以的,但请记住,恶意用户总是可以编辑cookie,所以你不能信任他们的内容。用户几乎可以向%2
中注入任何内容。因此,如果您知道这是一个简单的词,例如,那么为什么不(\w+)
,这将有效地防止恶意注入?我不希望是一个简单的词,而是一个完全限定的域名。顺便说一句,我无法让规则在我的系统上按书面形式运行。在重写过程中,我将$1更改为%1。在RewriteRule中,我将^(*.?)/.*$
更改为^(.*)$
我在RewriteRule中遇到了一个内部服务器错误。听起来好像您没有摆脱RewriteCond%{REQUEST\u URI}
行。