htaccess не работает - обновить путь к изображению со значением cookie - PullRequest
1 голос
/ 15 марта 2012

Я использую это в моих htaccees для изменения пути img в зависимости от значения cookie:

 <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="" />

Я счастливЯ сделал это так далеко, но проблема в том, что ... это не работает.И я не знаю почему?Кто-нибудь может пролить свет?

Спасибо!

ПОЛОВИНА:
Я получил это на работу:

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

, который заменяет мою переменную на set_value.Однако, как только я добавляю единственное условие, все это терпит неудачу, и никакие изображения не отображаются вообще.Например, это должно дать мне значение cookie, которое я хочу ввести вместо SET_VALUE:

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

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Решение: (после большого вмешательства и большой помощи со стороны @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-файлимеет конечную точку с запятой ... У меня было настроено следующее печенье:

   document.cookie = "client=value"

Что не сработало.Изменив это на следующее:

   document.cookie = "client=value;"

заставил это работать.Может быть, полезно для кого-то эль тоже.

0 голосов
/ 15 марта 2012

Я предполагаю, что проблема в том, что вы попадаете по пути, подобному /images/jpg/1.jpg или /images//1.jpg?

Вы используете %1 в качестве обратной ссылки на значение cookie, но обратные ссылки должны ссылаться на «последний найденный RewriteCond», и у вас есть другие (включая один с группировкой) после того, который вы хотите сопоставить. Попробуйте переместить cookie от одного до последнего.

Кроме того, у вас есть две группировки в этом файле cookie, но вы используете %1, что в итоге будет означать (?:^|;\s*) вместо ([^;]*), что даст вам неверные результаты.

Если это не ваша проблема, не могли бы вы рассказать, как выходит URL? Не перезаписывается ли оно вообще или неправильно переписывается?

...