AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 404483
Accepted
petRUShka
petRUShka
Asked: 2012-07-04 09:55:02 +0800 CST2012-07-04 09:55:02 +0800 CST 2012-07-04 09:55:02 +0800 CST

Apache:如何设置自定义 401 错误页面并保存原始行为

  • 772

我使用 Apache/2.2.3 (Linux/SUSE) 进行基于 Kerberos 的身份验证。当用户试图打开一些 url 时,浏览器会像 HTTP Basic Auth 一样询问域登录名和密码。如果用户取消此类请求 3 次,Apache 将返回401 Authorization Required错误页面。我当前的虚拟主机配置是

    <Directory /home/user/www/current/public/>
            Options -MultiViews +FollowSymLinks
            AllowOverride None
            Order allow,deny
            Allow from all
            AuthType Kerberos
            AuthName "Domain login"
            KrbAuthRealms DOMAIN.COM
            KrbMethodK5Passwd On
            Krb5KeyTab /etc/httpd/httpd.keytab
            require valid-user
    </Directory>

我想为用户设置漂亮的自定义 401 错误页面和一些说明。我在虚拟主机配置中添加了这样一行:

 ErrorDocument 401 /pages/401

它有效,当用户无法授权 apache 将他重定向到我的漂亮页面时。但是 Apache 不像以前那样询问用户登录\密码。我同时想要这个功能和漂亮的错误页面!

是否有可能使其正常工作?

apache-2.2 httpd kerberos custom-errors http-error-401.2
  • 2 2 个回答
  • 9281 Views

2 个回答

  • Voted
  1. Best Answer
    petRUShka
    2012-07-06T01:11:22+08:002012-07-06T01:11:22+08:00

    首先,当我使用

    ErrorDocument 401 /pages/401
    

    /pages/401是动态后端生成的内容。当我创建了简单的静态401.html并设置了

    ErrorDocument 401 /401.html
    

    整个系统开始正常工作。所以解决方案是:不要使用动态页面来显示 401 错误,使用静态 html。

    • 3
  2. bahamat
    2012-07-04T11:01:06+08:002012-07-04T11:01:06+08:00

    您所描述的行为是客户端的,与 Apache 本身无关。

    这是实际发生的事情:

    1. 浏览器发送请求
    2. Web 服务器响应 401
    3. 浏览器提示用户输入凭据
    4. 浏览器重新发送带有凭据的请求

    如果授予访问权限,Apache 将返回 200,如果未授予访问权限,则返回步骤 2 并继续。由用户代理(即您的浏览器)决定尝试多少次。您的浏览器显然在尝试 3 次后停止。之后它会缓存结果并只显示错误页面。

    浏览器经常缓存这些类型操作的结果,所以这是正常的。在重试之前您是否退出了浏览器?那应该清除缓存的结果。

    如果您想准确查看 Apache 的“原始”行为方式,请使用以下命令:

    未经身份验证的请求:

    curl -D - http://yourserver/page.html
    

    已验证*请求:

    curl -u user:pass -D - http://yourserver/page.html
    

    您将在输出的最顶部看到标头,了解 Apache 如何响应经过身份验证的请求和未经身份验证的请求。您应该始终看到 401 代表未授权,200 代表授权。如果不是这种情况,那么它要么配置不正确,要么发生了其他事情。


    *curl可以通过传递进行 kerberos 身份验证,--negotiate但我从未这样做过,也没有有效的测试环境可以尝试。阅读curl(1)手册以获取更多信息。

    • 1

相关问题

  • Apache Django Mod_Wsgi - 自动重新加载应用程序

  • Apache:对多个虚拟主机使用相同的目录指令

  • Apache 上的子域不工作 - 找不到服务器

  • PHP 作为 CGI 还是 Apache 模块?

  • 避免将某些丢失的文件记录到 Apache2 错误日志中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve