我们的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
,,)。RewriteCond
RewriteRule
.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]
但我不确定它是否有效......(我从来没有使用过这个功能。)