如何在mod_rewrite设置中查找和删除旧的重定向?

时间:2013-08-14 17:46:09

标签: apache bash mod-rewrite logging grep

我有一些网站,我们主要使用mod_rewrite将旧链接重定向到新的相关网页。

问题是,我们现在每个站点都有成千上万的规则,其中一些在极端情况下模糊不清,并且已存在多年。然后有一些相互干扰和/或创建循环。真有趣。

我想做的是将mod_rewrite记录一段时间 - 让我们说几个星期,然后解析这些日志以查找已经使用过的实际重定向,然后删除任何未重定向的重定向。

问题在于:

a)它会创建非常大的日志文件,因为它会为每个请求记录至少一行(如果您使用的是更有用的日志级别,则为2),即使它刚刚通过。

b)日志不是非常有用 - 有用的一行似乎是:

1.2.3.4 - - [15/Aug/2013:03:23:57 +1000] [www.mysite.com/sid#2b5174473a38][rid#2b51748a42d0/initial] (2) rewrite '/pete' -> '/pete-website/'

但由于几乎每一行都有短语“(2)重写”,所以很难找到有用的。

我想我需要使用grep将日志缩小到有用的东西,然后用脚本来解析重写规则并找到哪些没有被使用?

我想真正的问题是,在这种情况下我肯定不是唯一的,但是我找不到其他任何人在网上任何其他地方询问或寻找答案 - 任何人都有任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

使用conditional log

在你怀疑RewriteRule的{​​{1}}中:

 RewriteRule /old/page /new/page [R=301,E=redirectinuse]

在日志记录设置中:

 CustomLog logs/old_redirections common env=redirectinuse