如何防止在htaccess无限redirect循环?

我们的域名/app/index.php正在iframe中加载domain.com/blog。

所以我的redirect规则应该是这样的;

- domain.com/ => /app/index.php - domain.com/blog(.*) => /app/index.php?(.*) 

第二条规则是因为如果有人想直接去博客,我们首先运行我们的应用程序,并将博客放在iframe中,并将传入的查询string附加到iframe src标记,以便它不打开它的主页,而是打开请求的URL。

问题是,因为我redirect我的第一条规则,iframe结束了无限循环。 它试图无休止地把自己放入另一个iframe中。

有没有办法分配一个Env var,这样如果redirect,它不会重复?

或者为了清楚地解决这个问题,我不希望博客在没有应用程序的情况下打开。 我的htaccess应该如何?

感谢:D

ps:我们想在htaccess上做,因为php + jsredirect是低效率和丑陋的。

你可以研究RewriteCond指令来有条件地应用RewriteRule。 但是,如果您的RewriteRule明确匹配期望的URL的开始和结尾来redirect,例如,这应该不是严格必要的

 RewriteRule ^/$ /app/index.php [L] 

请注意,redirect可以是内部的或外部的。 如果您明确提供了[R]标志到您的RewriteRule,那么浏览器将被通知要获取的新URL。 否则,Apache将尝试在内部获取重写的规则,而不通知浏览器获取实际的URL。

最后,您可以在.htaccess文件中使用mod_rewrite指令( RewriteEngineRewriteCondRewriteRule )。

我发表了一个关于避免无限循环的教程 ,你可能会觉得有用。 在为URL创build重写规则时没有结尾斜杠是个大问题。 我希望它给你的见解。 -侦察

你可以试试mod_rewrite。 在.htaccess中这样的东西:

 RewriteEngine On RewriteRule /blog/(.*) /app/index.php?$1 [R] RewriteRule ^index.php$ /app/index.php [R] 

从理论上讲,已经有一个envvariables来完成这个工作:

 RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule .* - [L] 

但我不确定它是否有效…(我从来没有使用过这个function。)