Переписать правила, не работающие для Drupal 7 в подпапке

Поэтому у меня есть сайт, который запускается на example.com и служит шлюзом для сайта Drupal, который работает в папке /drupal. Что я хочу сделать, я хочу установить файл cookie на этой странице шлюза при входе в систему, а затем разрешить доступ к example.com/drupal, а если cookie не установлен, перенаправите его обратно на example.com.

Но моя проблема заключается в том, что правило не работает в папке /drupal в drupal.htaccess, но я протестировал его, и он отлично работает в корневом каталоге.

Правило таково:

   RewriteCond %{HTTP_COOKIE} !CookieName=test [NC]
   RewriteRule .* http://example.com [L]

Но по какой-то причине правило здесь не работает, и пользователь может получить доступ к папке /drupal без куки файла, но если я поместил одно и то же правило в /root, то перенаправление произойдет, так как cookie с этим именем не установлен.

Ответы

Ответ 1

Быстрая проверка на моей стороне, чтобы убедиться, что это работает, вот пример

/.htaccess

RewriteEngine On

# if no "logged_in" cookie set to "yes", then create it
# cookie is valid for any hosts of .example.com, during 1 minute, for the entire website, not necessarily ssl only, not accessible from javascript
RewriteCond %{HTTP_COOKIE} !logged_in=yes [NC]
RewriteRule ^ - [CO=logged_in:yes:.example.com:1:/:false:true]

См. Эту ссылку для документации флага CO (как создать файл cookie через mod_rewrite)

/drupal/.htaccess

RewriteEngine On

RewriteCond %{HTTP_COOKIE} !logged_in=yes [NC]
RewriteRule ^ /index.php [R,L]

сценарий

  1. Перейдите в /drupal/ и вы должны получить перенаправление на корневой индекс
  2. Вернитесь к /drupal/ и все должно быть ОК (поскольку корневой индекс создал файл cookie)
  3. Обновите текущую страницу (/drupal/) столько, сколько хотите в течение 1 минуты, то вы снова получите перенаправление на корневой индекс (срок действия файла cookie истек)

Мне приходят в голову две причины, почему вы не можете заставить его работать

  1. Вы не настроили свой файл cookie
  2. Правило /drupal/.htaccess не выполняется, потому что помещено после основного правила по умолчанию (поместите его вверху, чтобы убедиться)