重写规则不适用于子文件夹中的Drupal 7

时间:2018-07-28 08:06:56

标签: .htaccess mod-rewrite drupal

因此,我有一个在example.com上运行的站点,并且充当了在文件夹/drupal中运行的Drupal站点的网关。我想做的是,我想在登录时在该网关页面上设置一个cookie,然后允许访问example.com/drupal,如果未设置cookie,请重定向回example.com。

但是我的问题是,该规则在drupal .htaccess的/drupal文件夹中不起作用,但是我对其进行了测试,并且在根目录中也可以正常工作。

规则如下

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

但是由于某种原因,该规则在这里不起作用,用户可以在没有cookie的情况下访问/ drupal文件夹,但是如果我在/ root中放置相同的规则,则会发生重定向,因为未设置该名称的cookie

1 个答案:

答案 0 :(得分:2)

快速测试以确保其正常工作,这是一个示例

/.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标志文档(如何通过mod_rewrite创建cookie),请参见this link

/drupal/.htaccess

RewriteEngine On

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

场景

  1. 转到/drupal/,您应该重定向到根索引
  2. 返回/drupal/,应该可以(因为根索引创建了cookie)
  3. 在1分钟内刷新任意数量的当前页面(/drupal/),然后您将再次获得到根索引的重定向(cookie已过期)

我想到了两个为什么无法使它起作用的原因

  1. 您没有正确设置cookie
  2. 您的/drupal/.htaccess规则未执行,因为它位于main-default规则之后(将其放在顶部以确保)