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

The*_*Law 11 .htaccess mod-rewrite drupal

所以我有一个在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]
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*man 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]
Run Code Online (Sandbox Code Playgroud)

请参阅此链接以获取CO标志文档(如何通过创建 cookie mod_rewrite

/drupal/.htaccess

RewriteEngine On

RewriteCond %{HTTP_COOKIE} !logged_in=yes [NC]
RewriteRule ^ /index.php [R,L]
Run Code Online (Sandbox Code Playgroud)

设想

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

我想到了为什么你不能让它发挥作用的两个原因

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