2010-10-20 2 views
8

У меня не получилось в Google, и я не смог найти ответ, который можно найти здесь. Извините, я новичок в htaccess, и у него действительно странный синтаксис и так сложно учиться!Как сделать перенаправление htaccess на основе значения cookie

Вы можете увидеть, что я пытаюсь сделать здесь ...

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC] 
RewriteRule .* http://localhost/mysite/cache/$1 [R=301,L] 
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L] 

Я кэширование страниц для каждого пользователя для скорости загрузки. Я хочу перенаправить в соответствующую папку кэша HTML, если они вошли в систему с файлом cookie, в противном случае я хочу загрузить гостевой кеш.

Прямо сейчас он переходит в инфи-петлю. Если я удалю [R = ..., то я получу внутреннюю ошибку сервера.

Пожалуйста, помогите !!! Спасибо!!!

ответ

8

Это работает для печенья, как id=1234:

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} ^id=([0-9]*)$ [NC] 
RewriteRule .* http://localhost/mysite/cache/%1 [R=301,L] 
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L] 

Теперь для вашей проблемы: Убедитесь, что ваш Htaccess не распространяется на страницу, которую вы перезаписать на! Например, если ваш .htaccess лежит в /mysite/.htaccess

Он будет снова использоваться в

http://localhost/mysite/cache/%1 

Это может быть причиной для бесконечного цикла. Чтобы решить эту проблему, убедитесь, что правила htaccess не применяются к подкаталогам или используют другой каталог для кеша.

+0

Где я могу найти информацию о том, как указать, к каким подкаталогам применять? Спасибо. – BinaryGal

+0

Наконец-то я нашел веб-страницу с ответом: http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html#menu0-el14 Трюк состоит в том, чтобы использовать тире "-" thingy. Вот мое решение, которое работает: RewriteRule ^. + $ - [L] – BinaryGal

1

Вот решение для тех, кто еще с этой проблемой:

RewriteEngine on 
RewriteRule ^.+$ - [L] 
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC] 
RewriteRule .* http://localhost/mysite/$1 [R=301,L] 
RewriteRule .* http://localhost/mysite/guest [R=301,L] 

Хотя я не проверял печенье часть еще - я уверен, что там будет много больше проблем нет! Но в остальном я тестировал, и это работает! (он идет к гостю, а затем не входит в infi-loop, yay!)

Отличный день! 8)

+3

думал, что добавлю, если вы хотите перенаправить, если user_id НЕ присутствует, сделайте это вместо этого: 'RewriteCond% {HTTP_COOKIE}! ^. * User_id = (\ d +). * $ [NC] ' –

Смежные вопросы