【问题标题】:How to check multiple cookies are set in .htaccess?如何检查 .htaccess 中设置的多个 cookie?
【发布时间】:2021-02-26 20:44:26
【问题描述】:

我正在我的.htaccess 文件中检查一个名为“user”的cookie。如果设置了 cookie,则重定向到 index.html 页面,如果未设置 cookie,则重定向到 index.php 页面。我不确定这是否是检查 cookie 存在的正确方法,但这是我的 .htaccess 规则:

RewriteEngine On

RewriteCond %{HTTP_COOKIE} user;? [NC]
RewriteRule ^(.+)$ index.html?url=$1 [QSA,L]

RewriteCond %{HTTP_COOKIE} !user;? [NC]
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

但是假设我还有一个名为“login”的 cookie,那么我们如何在这个 .htaccess 文件中检查它?

我是否需要为该特定 cookie 重复上述相同的代码行?我们可以在单个条件或行中检查多个 cookie 吗?

【问题讨论】:

    标签: .htaccess mod-rewrite cookies url-rewriting friendly-url


    【解决方案1】:

    您能否尝试以下,根据您显示的示例编写。 请确保在测试您的 URL 之前清除您的浏览器缓存。

    RewriteEngine On
    
    RewriteCond %{HTTP_COOKIE} user;? [NC,OR]
    RewriteCond %{HTTP_COOKIE} login;? [NC]
    RewriteRule ^(.+)$ index.html?url=$1 [QSA,L]
    
    RewriteCond %{HTTP_COOKIE} !user;? [NC]
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
    


    或者在单个规则集中尝试。请确保您使用上述规则或一次只遵循一个规则。

    RewriteEngine On
    
    RewriteCond %{HTTP_COOKIE} (user|login);? [NC]
    RewriteRule ^(.+)$ index.html?url=$1 [QSA,L]
    
    RewriteCond %{HTTP_COOKIE} !user;? [NC]
    RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
    

    【讨论】:

      【解决方案2】:

      我们可以在单个条件或行中检查多个 cookie 吗?

      是的,你可以使用这样的条件:

      RewriteEngine On
      
      RewriteRule ^index\.(php|html)$ - [L,NC]
      
      # skip all files and directories from rewrite rules below
      RewriteCond %{REQUEST_FILENAME} -d [OR]
      RewriteCond %{REQUEST_FILENAME} -f
      RewriteRule ^ - [L]
      
      # execute when either of these cookies are set
      RewriteCond %{HTTP_COOKIE} (^|;)(user|login)= [NC]
      RewriteRule .+ index.html?url=$0 [QSA,L]
      
      # execute when neither of above cookies are set
      RewriteRule .+ index.php?url=$0 [QSA,L]
      

      【讨论】:

      • 每当我提出关于 htaccess 的问题时,您几乎每次都为我提供答案。但 RavinderSingh13 的解决方案让我看起来更简单易懂。抱歉,我无法遵守您的 htaccess 规则。
      • 选择适合您的任何答案都绝对没问题。我在您当前的设置中添加了 2 个附加规则,以便您 1. 不要遇到重写循环 2. 避免重写资源文件,例如图像、css、js 文件等。除此之外,我可以澄清您不清楚的任何其他内容。
      • 好的,谢谢。有机会我也会试试你的规则。
      猜你喜欢
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      相关资源
      最近更新 更多