htaccess无法正常工作 - 使用cookie值更新图像路径

时间:2012-03-15 14:13:57

标签: .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|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>

图片链接如下:

<img src="http://www.some.com/images/VARIABLE/img/1.jpg" alt="" />

我很高兴我做到这一点,但问题是......它不起作用。我不知道为什么?任何人都能解释一下吗?

谢谢!

HALFWAY:
我得到了这个工作:

RewriteRule ^(.+)/VARIABLE/(.+)$ $1/SET_VALUE/$2 [L]

用set_value替换我的变量。但是,只要我添加一个条件,整个过程就会失败并且无法显示任何图像。例如,这应该给我cookie值,我想输入而不是SET_VALUE:

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

2 个答案:

答案 0 :(得分:0)

我假设问题是您最终使用/images/jpg/1.jpg/images//1.jpg这样的路径?

您使用%1作为Cookie值的反向引用,但反向引用应该引用“最后匹配的RewriteCond”,并且在您想要的后面引用其他人(包括一个分组)比赛。尝试将cookie移动到最后。

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

如果这不是您的问题,您能详细说明网址的输出方式吗?它根本没有被重写,还是被错误地重写了?

答案 1 :(得分:0)

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

<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>

棘手的部分,需要永远解决的是确保你的cookie有一个尾随的分号...我的cookie设置如下:

   document.cookie = "client=value"

哪个不起作用。将其更改为:

   document.cookie = "client=value;"

让它发挥作用。也许对某些人有帮助。