.htaccess htaccess不工作-使用cookie值更新图像路径

.htaccess htaccess不工作-使用cookie值更新图像路径,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我在我的htaccees中使用它来根据cookie值更改img路径: <IfModule mod_rewrite.c> # check for client cookie RewriteCond %{HTTP_COOKIE} (?:^|;\s*)client=([^;]*) # check if an image was requested RewriteCond %{REQUEST_FILENAME} \.(jpe?g|gif|bmp|

我在我的htaccees中使用它来根据cookie值更改img路径:

 <IfModule mod_rewrite.c>
    # check for client cookie   
    RewriteCond %{HTTP_COOKIE} (?:^|;\s*)client=([^;]*)
    # check if an image was requested   
    RewriteCond %{REQUEST_FILENAME} \.(jpe?g|gif|bmp|png)$
    # exclude these folders
    RewriteCond %{REQUEST_URI} !some/members/logos  

    # grab everything before the variable folder and everything afterwards
    # replace this with first bracket/cookie_value/second bracket
    RewriteRule (^.+)/VARIABLE/(.+)$ $1/%1/$2 [L]
 </IfModule>
它用一个集合值替换我的变量。然而,只要我添加一个条件,整个事情就失败了,没有任何图像显示出来。例如,这将为我提供cookie值,我希望输入该值而不是设置值:

 RewriteCond %{HTTP_COOKIE} (?:^|;\s*)client=([^;]*) [NC]

我假设问题是您最终得到的路径类似于
/images/jpg/1.jpg
/images//1.jpg

您正在使用
%1
作为对cookie值的反向引用,但反向引用应引用“上次匹配的重写秒”,并且在要匹配的值之后还有其他值(包括带有分组的值)。试着把饼干移到最后一块

此外,在cookie-one中有两个分组,但您使用的是
%1
,它最终会引用
(?:^ |;\s*)
,而不是
([^;]*)
,这会给您错误的结果


如果这不是你的问题,你能详细说明URL是如何产生的吗?它根本没有被重写,还是被重写错了?

解决方案:(经过@LazyOne的大量干预和帮助!):

这是行不通的。将其更改为:

   document.cookie = "client=value;"

成功了。也许对其他人也有帮助

谢谢你的信息。我想如果我在变量之前和之后分组,我就可以执行(分组之前)/cookie/(分组之后)并返回原始URL部分。如果它根本没有被重写,那么肯定还有另一个问题。我不能一目了然地看到它,因此我建议有选择地删除
RewriteCond
s,直到您发现是哪个(或规则本身)导致了问题。可能会暂时使用字符串而不是
%1
,直到您重新编写为止。是的,(分组前)/cookie/(分组后)应该不会有任何问题。重写规则不会干扰
%1
反向引用,只会影响其他重写。如果您完全控制Apache,则启用调试模式:
RewriteLogLevel 9
(或最新版本)并检查日志--它应该详细告诉您失败的地方(调试级别越高,日志越详细)。没有访问权限…:-(还有什么其他想法可以从哪里获得关于发生了什么的信息吗?我只是猜测现在正在上传检查,我不想看到我自己做得太久了……也许你可以在本地Apache进行检查?否则可能会在循环中反复尝试。在任何情况下:
^(+)/VARIABLE/(.+\(jpe?g|gif|bmp|png))$
重写规则的模式将摆脱第二个条件。
RewriteCond%{REQUEST\u URI}!/some/members/logo
也可以正常工作(除非您在这里有错误的路径!!)。我建议检查那些
%{xxx}
变量也一样--可能它们的值与您期望的值不同,例如:
RewriteRule^info$/debug.php?uri=%{REQUEST\u uri}&cookie=%{HTTP\u cookie}[L]
然后签入debug.php这些变量将包含哪些内容。剩下的cookie似乎可以工作了
 RewriteCond %{HTTP_COOKIE} (?:^|;\s*)client=([^;]*) [NC]
<IfModule mod_rewrite.c>
   # exclude these folders
   RewriteCond %{REQUEST_URI} !/some/members/logos  
   # check for client cookie        
   RewriteCond %{HTTP_COOKIE} client=([^;]*) [NC]       
   # replace variable with cookie value
   RewriteRule ^(.+)/variabel/(.+\.(jpe?g|gif|bmp|png))$ $1/%1/$2 [L]
</IfModule>
   document.cookie = "client=value"
   document.cookie = "client=value;"