如果URL存在,则使用Apache mod_rewrite进行条件重定向

如果URL存在,则使用Apache mod_rewrite进行条件重定向,apache,mod-rewrite,Apache,Mod Rewrite,我正在迁移一个大型站点(每个页面都有重大更改),并希望在每个页面完成后,一组测试用户自动从当前站点重定向到新站点 是什么 www.mysite.com/admin/somefile.php 将成为 admin.mysite.com/somefile.php 当每个页面迁移到新站点时,我希望来自特定IP地址的用户自动重定向到该站点。这与RewriteCond的'-U'(现有URL)标志类似。mod_rewrite语句(www.mysite.com)将与 RewriteEngine On

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

是什么

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参数在定义之前被引用了

有谁能建议如何做到这一点


谢谢,Chris

您可以用这种方式来操作
URI

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

希望这能奏效。顺便说一句,你可以在这里在线测试你的重写工作

谢谢你,懒鬼——你给了我追求它的信心(如果你能回答我,我会接受的)

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

  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——当计算RewriteCond时就会知道它(首先计算RewriteRule的模式)。我只是不确定
-U
是否以这种方式工作(如果admin.mysite声明为单独的站点)。在任何情况下——我建议启用“重写调试”(
RewriteLogLevel 9
)并检查“重写日志”以了解确切的详细信息。无论页面是否已转换为新站点,这肯定会尝试重定向到新站点?这不能满足我的需要。无论如何,谢谢你。