mod_rewrite, перенаправить и установить cookie, предотвращая петлю перенаправления - PullRequest
0 голосов
/ 21 февраля 2019

Я застрял здесь и сейчас на несколько часов ... любая помощь будет оценена!

Что мне нужно сделать:

Есть приложение, где внадо "защищать".Это означает, что мне нужно показать страницу с отказом от ответственности, которая не является частью самого защищенного приложения, а находится в том же домене / сервере.Эту страницу отказа от ответственности необходимо показывать каждому посетителю каждые 8 ​​часов.

Моя концепция:

  1. В Apache при каждом запросе проверяйте,имеется определенный файл cookie, «перехваченный».

  2. При наличии файла cookie просто обработайте запрошенный URL-адрес без изменений.

  3. Еслиcookie не существует, и URL-адрес не является catch.html, перенаправьте его в /catch.html?intercepted_url= enjrequerst_uri_with_params}.на этом же шаге установите cookie.

  4. Браузер установит cookie, следит за перенаправлением и загрузит catch.html (cookie уже существует), пользователь увидит заявление об отказена этой странице.

  5. В файле catch.html при использовании JavaScript файл cookie, «перехваченный», будет обновляться с продолжительностью жизни 8 часов

  6. В catch.html с использованием JavaScript будет отображаться ссылка, указывающая на перехваченный URL.

  7. Пользователь щелкнет созданную ссылку и выдаст новый запрос к ранее перехваченному запросу

  8. GOTO: 1

Что я пробовал до сих пор:

Конфигурация Apache:

# Exclude the catch destination in order to prevent a redirect loop
RewriteCond %{REQUEST_URI} !/catch.html
# Check if the cookie "intercepted" is missing
RewriteCond %{HTTP_COOKIE} !intercepted
# Redirect and append the original url as request parameter, preserving params, and setting the cookie
RewriteRule ^(.*)$ /catch.html?intercepted_url=$1 [QSA,R=301,CO=intercepted:TRUE:%{HTTP_HOST}]

Текущий результат:

  1. Открытие http://local.example.com/foo/bar/baz.html?a=b&x=z&1=2результаты ia перенаправление, как и ожидалось, ОК
  2. Повторная попытка первого URL теперь должна пройти, так как файл cookie установлен, но нет, я застрял на странице отказа от ответственности: (

Есть идеи, как это исправить?Спасибо всем заранее!

1 Ответ

0 голосов
/ 27 февраля 2019

концепция работает как положено.перенаправление выполняется, как описано, но браузер кэшировал перенаправление, поскольку оно было постоянным (301).Решением было использование временного перенаправления (302).

Я также сохранил перехваченный URL в файле cookie, чтобы сохранить URL чистым.но мне не удалось установить время жизни куки с перенаправлением.кажется, нет способа рассчитать его в рамках правила перезаписи.я использовал javascript, чтобы переписать cookie на странице catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...