如何检测Apache或IIS中何时使用了URL重写


How can I detect when a URL rewrite has been used in Apache or IIS?

Q&A-URL重写检测

检测Apache 2.4或IIS中是否启用了URL重写模块很简单,但如何检测重写是否真的被使用呢?

我个人已经四处寻找了一个在这两种环境中都能工作的解决方案,在它们的最新迭代中,但最终不得不自己对服务器的变量进行排序,以找到未重写的URL和重写的URL之间的区别。

Q&A-URL重写检测

可以使用以下方法检测重写是否在任何给定请求中实际使用:

function IsRewrite()
{
    if(!empty($_SERVER['IIS_WasUrlRewritten']))
        return true;
    else if(array_key_exists('HTTP_MOD_REWRITE',$_SERVER))
        return true;
    else if( array_key_exists('REDIRECT_URL', $_SERVER))
        return true;
    else
        return false;
}

如果没有使用URL重写,则根本不会设置上述变量。根据Apache的版本,后两个变量中的至少一个将被分配,在IIS下,列表中的第一个将被指定。