【问题标题】:Using Apache mod_rewrite for conditional redirection if URL exists如果 URL 存在,则使用 Apache mod_rewrite 进行条件重定向
【发布时间】:2011-07-14 09:33:35
【问题描述】:

我正在迁移一个大型网站(每个页面都进行了重大更改),并且希望在每个页面完成后自动将一组测试用户从当前网站重定向到新网站。

是什么

www.mysite.com/admin/somefile.php

会变成

admin.mysite.com/somefile.php

当每个页面都迁移到新站点时,我希望来自特定 IP 地址的用户自动重定向到该站点。这看起来像是 RewriteCond 的“-U”(现有 URL)标志的情况。 mod_rewrite 语句(对于 www.mysite.com)将类似于

  RewriteEngine On
  RewriteCond %{REMOTE_ADDR} 123\.123\.123\.123           # for test users only
  RewriteCond http://admin.mysite.com/$1 -U               # if new page exists
  RewriteRule /admin/(.*) http://admin.mysite.com/$1 [R=302,L]  # then redirect

但是,这似乎不起作用 - 可能是因为在定义之前引用了 $1 参数?

谁能建议如何实现这一点?

谢谢,克里斯

【问题讨论】:

  • 是的,您可以在此处引用 $1 - RewriteCond 何时被评估(首先评估 RewriteRule 的模式)将知道。我只是不确定-U 是否以这种方式工作(如果 admin.mysite 声明为单独的站点)。无论如何——我建议启用重写调试 (RewriteLogLevel 9) 并检查重写日志以获取确切的详细信息。

标签: apache mod-rewrite


【解决方案1】:

谢谢,LazyOne – 你给了我追求它的信心(如果你把它作为答案,我会接受它)。

我认为问题在于使用 /admin 而不是 ^admin;我最后的 mod_rewrite 语句是:

  RewriteEngine On
  RewriteCond %{REMOTE_ADDR} 123\.123\.123\.123           # for test users only
  RewriteCond http://admin.mysite.com/$1 -U               # if new page exists
  RewriteRule ^admin/(.*) http://admin.mysite.com/$1 [R=302,L]  # then redirect

...如果存在的话,它似乎可以正确地提供来自新站点的页面,否则提供来自旧站点的页面。

【讨论】:

    【解决方案2】:

    你可以用这种方式来操纵URI

    RewriteCond %{REQUEST_URI} ^/admin/(.*)$
    RewriteRule .* http://admin.mysite.com/#1 [R=302,L]
    

    希望这可行。顺便说一句,你可以在这里在线测试你的重写http://martinmelin.se/rewrite-rule-tester/

    【讨论】:

    • 无论页面是否已转换到新站点,这肯定会尝试重定向到新站点吗?这不能满足我的需求。还是谢谢。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 2012-11-12
    • 2020-01-22
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多