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

时间:2011-07-14 09:33:35

标签: 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
  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参数?

有人可以建议如何实现这一目标吗?

谢谢,克里斯

2 个答案:

答案 0 :(得分: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

...如果它存在,它似乎正确地从新网站提供页面,否则从旧网站提供页面。

答案 1 :(得分:-1)

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

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

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