【问题标题】:How to do htaccess redirect based on cookie value如何根据 cookie 值进行 htaccess 重定向
【发布时间】:2011-04-28 01:58:30
【问题描述】:

我在谷歌上失败了,在这里我找不到答案。抱歉,我是 htaccess 的新手,它的语法很奇怪,很难学!

你可以在这里看到我想要做什么......

RewriteEngine on
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC]
RewriteRule .* http://localhost/mysite/cache/$1 [R=301,L]
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L]

我正在为每个用户缓存页面以提高加载速度。如果他们使用 cookie 登录,我想重定向到正确的 HTML 缓存文件夹,否则我想加载访客缓存。

现在它进入了一个 infi 循环。如果我删除 [R=... 则会收到内部服务器错误。

请帮忙!!!谢谢!!!

【问题讨论】:

    标签: .htaccess cookies redirect


    【解决方案1】:

    这适用于像id=1234这样的cookie:

    RewriteEngine on
    RewriteCond %{HTTP_COOKIE} ^id=([0-9]*)$ [NC]
    RewriteRule .* http://localhost/mysite/cache/%1 [R=301,L]
    RewriteRule .* http://localhost/mysite/cache/guest [R=301,L]
    

    现在解决您的问题: 确保您的 htaccess 不适用于您重写的页面!例如,如果您的 .htaccess 位于 /mysite/.htaccess

    以后还会用到

    http://localhost/mysite/cache/%1
    

    这可能是你无限循环的原因。要解决此问题,请确保未将 htaccess 规则应用于子目录或使用其他目录进行缓存。

    【讨论】:

    • 我在哪里可以查找有关如何告诉它应用到哪些子目录的信息?谢谢。
    • 我终于找到了一个带有答案的网页:askapache.com/htaccess/… 诀窍是使用破折号“-”的东西。这是我的有效解决方案:RewriteRule ^.+$ - [L]
    【解决方案2】:

    这是其他人遇到此问题的解决方案:

    RewriteEngine on
    RewriteRule ^.+$ - [L]
    RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC]
    RewriteRule .* http://localhost/mysite/$1 [R=301,L]
    RewriteRule .* http://localhost/mysite/guest [R=301,L]
    

    虽然我还没有测试 cookie 部分 - 我相信那里会有更多的问题!但是我测试了其余的并且它有效! (它去客人,然后不进入infi循环,耶!)

    祝你有美好的一天! 8)

    【讨论】:

    • 我想补充一下,如果你想在 user_id 不存在的情况下重定向,请改为:RewriteCond %{HTTP_COOKIE} !^.*user_id=(\d+).*$ [NC]
    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多