【问题标题】:Combine URL rewriting (to force https) with http auth?将 URL 重写(强制 https)与 http auth 结合使用?
【发布时间】:2010-01-27 13:17:18
【问题描述】:

我有一个域 mattpotts.com 并设置了一个子域 dev.mattpotts.com 供我开发,然后在文件准备好时将它们复制到正常域。

我的目录结构如下,dev.mattpotts.com指向dev/

+-public_html/
  +-项目1/
  +-项目2/
  +-项目3/
  +-开发/
    +-项目1
    +-项目2
    +-project3

我基本上希望能够通过添加dev. 来从http://mattpotts.com/project1 转到https://dev.mattpotts.com/project1

我在dev/ 中有以下.htaccess 并且它有效,所有这需要做的就是强制https。

重写引擎开启
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} dev
重写规则 ^(.*)$ https://dev.mattpotts.com$1 [R,L]

我想强制使用 https,以便我可以在目录上安全地使用 http auth。但是,当我将它与以下规则结合使用时,它不起作用。我已经设置了.htpasswd,但我什至还没有显示登录表单。

AuthType Basic
AuthName "开发保护区"
AuthUserFile .htpasswd
需要有效用户

我怎样才能成功地组合成组 .htaccess规则?

编辑,发生了非常奇怪的事情!

https://dev.mattpotts.com/project1/ 显示“你好!”来自网站的非开发版本(注意 https) http://dev.mattpotts.com/project1/ 显示“你好,开发者!” (根据需要)来自开发版本。这是怎么回事?!

【问题讨论】:

    标签: .htaccess https url-rewriting http-authentication


    【解决方案1】:

    您已经告诉我们您的.htaccess 文件在哪里,但您还没有告诉我们您的.htpasswd 文件在哪里。根据AuthUserFile 上的 Apache 文档:

    语法: AuthUserFile 文件路径

    File-path 是用户的路径 文件。如果它不是绝对的(,如果 它不以斜线开头),它是 被视为相对于ServerRoot

    所以换句话说,它正在寻找.htpasswd 类似/etc/apache2/.htpasswd 的地方。所以要么把你的.htpasswd文件移到那里,要么让你的指令包含文件的绝对路径,例如:

    AuthType     Basic
    AuthName     "Dev Protected Area"
    AuthUserFile /home/mattpots.com/public_html/dev/.htpasswd
    Require      valid-user
    

    但是,出于安全原因,我强烈建议您将 .htpasswd 文件保存在文档根目录之外。

    【讨论】:

      【解决方案2】:

      这些问题应该相互独立:我是否正确理解“强制 HTTPS”部分有效?

      也就是说,AuthUserFile .htpasswd 可能在错误的地方寻找 .htpasswd。最简单的解决方法是将完整路径和名称放在那里,例如AuthUserFile /home/matt/www/public_html/dev/.htpasswd(或任何你有 dev 目录的地方)。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-14
      • 2015-03-13
      • 2023-04-02
      • 2021-12-28
      • 1970-01-01
      • 2014-09-20
      • 2011-06-02
      • 2015-12-26
      相关资源
      最近更新 更多