htaccess:如何防止递归重定向?



这是设置:

WordPress和Webmail客户端安装在同一目录中。可通过两个 URL 访问网络邮件客户端:

  • www.server.com/webmail

    (安装它的目录。

  • www.server.com/wp-admin/admin.php?page=webmail-plugin

    (一个wordpress插件,在wordpress管理中的iframe中显示Webmail客户端

现在,我希望网络邮件客户端只能通过 urlwww.server.com/wp-admin/admin.php?page=webmail-plugin访问,并阻止任何直接访问(来自用户)www.server.com/webmail.

换句话说:如果用户尝试通过www.server.com/webmail访问网络邮件客户端,则应将其重定向到www.server.com/wp-admin/admin.php?page=webmail-plugin(这会强制用户先登录)。但是,wordpress插件仍然必须访问www.server.com/webmail才能在iframe中显示Webmail客户端。

这可以通过.htaccess配置吗?如果是这样,如何?

一些背景信息: 出于安全原因,我想这样做:Wordpress通过各种方式进行保护,但Webmail客户端仅支持基本身份验证,防止Webmail客户端出现任何问题的最简单方法是将其隐藏在wordpress后面 - 即从外部wordpress暴露其界面(尤其是不是登录页面)。

编辑:为什么从/webmail/wp-admin的简单重定向不起作用:

困难在于wordpress和网络邮件客户端在同一主机上运行。当wordpress显示网络邮件客户端时,它也从www.server.com/webmail加载它。因此,简单地将www.server.com/webmail重定向到www.server.com/wp-admin/admin.php?page=webmail-plugin会导致递归:

  1. 当网络邮件界面应该显示在iframe内时,wordpress会尝试加载www.server.com/webmail
  2. 但是请求被重定向回www.server.com/wp-admin/admin.php?page=webmail-plugin导致整个wordpress后端在iframe内显示(嵌套)。
  3. 嵌套的wordpress后端再次尝试显示webmail客户端(1.),该客户端再次被重定向到wordpress后端,依此类推。

递归问题可以通过.htaccess修复吗?如果没有,您还建议什么其他选择?

非常感谢您的建议。谢谢!

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mail.server.com [NC]
RewriteRule ^(.*) http://server.com/wp-admin/admin.php?page=webmail-plugin [L,R]

你可以在Web客户端上使用Javascript来检查它是否是从iframe内部调用的。如果它不是从iframe调用的,那么用户可以被重定向到wordpress登录页面。

最新更新