mod_alias RedirectMatch除一个之外的所有URL

时间:2013-06-20 11:06:34

标签: apache mod-rewrite apache2 mod-alias

我想将所有页面重定向到具有路径

的维护站点
  

/software/web/app.php/update

所以我需要重定向所有页面,除了网站本身,否则我会得到一个重定向循环,这意味着我需要一个匹配该路径并取消它的规则。听起来很简单,但对我来说不起作用。

  

RedirectMatch(?!/ software / web / app.php / update)h * tp://abc.de/software/web/app.php/update

     

RedirectMatch ^(?!/ software / web / app.php / update)$ h * tp://abc.de/software/web/app.php/update

     

RedirectMatch ^ / software / web / app.php(?!/ update)$ h * tp://abc.de/software/web/app.php/update

没有这些帮助。我尝试了几乎所有我在这里和其他网站上找到的东西,但是经过几个小时的审判,我投降并请求你的帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你可以用一个前缀条件的简单RewriteRule来做到这一点:

RewriteEngine on
RewriteCond %{REQUEST_URI} !(^/software/web/app.php/update$)
RewriteRule .* /software/web/app.php/update [R=307]

如果维护站点包含图像之类的内容,则需要从规则中排除这些图像,例如:

RewriteEngine on
RewriteCond %{REQUEST_URI} !(^/images/maintaining.jpg$)
RewriteCond %{REQUEST_URI} !(^/software/web/app.php/update$)
RewriteRule .* /software/web/app.php/update [R=307]

如果您要重定向到其他网站,则该规则可用于放置整个网址:

RewriteRule .* http://example.com/software/web/app.php/update [R=307]

作为参考,RewriteRule末尾的[R=307]表示浏览器会看到重写的URL,但它是临时重定向。