【问题标题】:htaccess: How to prevent recursive redirects?htaccess:如何防止递归重定向?
【发布时间】:2025-12-21 12:05:11
【问题描述】:

设置如下:

Wordpress 和 webmail 客户端安装在同一目录中。可通过两个 URL 访问 webmail 客户端:

  • www.server.com/webmail

    (它的安装目录。)

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

    (一个 wordpress 插件,在 iframe 中显示 webmail 客户端 在 wordpress 管理中。)

现在我想让 webmail 客户端只能通过 URL www.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 和 webmail 客户端运行在同一台主机上。当 wordpress 显示 webmail 客户端时,它也会从www.server.com/webmail 加载它。因此,简单地将www.server.com/webmail 重定向到www.server.com/wp-admin/admin.php?page=webmail-plugin 会导致递归:

  1. 当 webmail 界面应该显示在 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 修复递归问题?如果没有,您还有什么建议?

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

【问题讨论】:

    标签: wordpress .htaccess security


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

    【讨论】:

    • 感谢您的建议。简单地从 webmail 文件夹重定向到 wordpress 会导致递归。我已经相应地更新了问题。
    【解决方案2】:

    您可以在您的网络客户端上使用 Javascript 来检查它是否是从 iframe 内部调用的。如果不是从 iframe 调用它,则可以将用户重定向到 wordpress 登录页面。

    【讨论】:

    • 感谢您分享此内容。这是个好主意。但是,webmail 客户端不应该从外部 wordpress 暴露,所以恐怕这是错误的解决方案。我已经相应地更新了问题。