如何防止 htaccess 上的无限重定向循环?

如何防止 htaccess 上的无限重定向循环?

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

所以我的重定向规则应该是这样的;

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

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

问题是,由于我在第一条规则上重定向了所有内容,iframe 最终陷入了无限循环。它会不断尝试将自己放入其自身 iframe 中的另一个 iframe 中。

有没有办法分配一个环境变量,以便在进行重定向时不会重复?

或者为了明确解决问题,我永远不想在没有应用程序的情况下打开博客。我的 htaccess 应该怎么做?

感谢:D

ps:我们希望在 htaccess 上进行此操作,因为 php+js 重定向效率低下且丑陋。

答案1

你可以调查重写条件用于有条件地应用 RewriteRule 的指令。但是,如果您的 RewriteRule 明确匹配要重定向的预期 URL 的开头和结尾,则这并非绝对必要,例如


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

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

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

答案2

我发表了教程关于避免无限循环,您可能会觉得很有用。在为没有尾部斜杠的 URL 创建重写规则时,存在一个大问题。我希望它能给你带来启发。-scout

答案3

你可以用 mod_rewrite 试试。在 .htaccess 中添加类似以下内容:

RewriteEngine On

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

答案4

理论上已经有一个环境变量可以完成这项工作:

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

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

相关内容