代码之家  ›  专栏  ›  技术社区  ›  Matt

是否将URL重写(强制HTTPS)与HTTP身份验证结合起来?

  •  1
  • Matt  · 技术社区  · 15 年前

    我有一个域名, mattpotts.com 并建立了一个子域 dev.mattpotts.com 让我继续开发,然后在文件准备就绪时将其复制到普通域。

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

    +-public_html/
      +-project1/
      +-project2/
      +-project3/
      +-dev/
        +-project1
        +-project2
        +-project3

    我基本上想从 http://mattpotts.com/project1 https://dev.mattpotts.com/project1 通过添加 dev. .

    我有以下内容 .htaccess 在里面 DEV/ 它工作了,所有这些需要做的就是强制HTTPS。

    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteCond %{REQUEST_URI} dev 
    RewriteRule ^(.*)$ https://dev.mattpotts.com$1 [R,L]

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

    AuthType Basic
    AuthName "Dev Protected Area"
    AuthUserFile .htpasswd
    Require valid-user

    如何成功地组合到 HTAccess 规则?

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

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

    2 回复  |  直到 15 年前
        1
  •  0
  •   Jeremy Visser    15 年前

    你告诉我们你的 .htaccess 文件是,但你还没有告诉我们 .htpasswd 文件是。根据Apache文档 AuthUserFile :

    语法: AuthuServer文件 文件路径

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

    换句话说,它在寻找 HTPASWD 在某个地方 /etc/apache2/.htpasswd . 所以要么移动你的 HTPASWD 在那里归档,或使您的指令包含文件的绝对路径,例如:

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

    但是,出于安全考虑,我强烈建议您 HTPASWD 文件在文档根目录之外。

        2
  •  0
  •   Piskvor left the building Rohit Kumar    15 年前

    这些问题应该彼此独立:我是否正确理解“强制HTTPS”部分的工作原理?

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