将URL重写(强制https)与http auth相结合?

时间:2010-01-27 13:17:18

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

我有一个域mattpotts.com,并为我开发了一个子域dev.mattpotts.com,然后在准备好时将文件复制到正常域。< / p>

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

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

我基本上希望能够通过添加http://mattpotts.com/project1https://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!' (根据需要)来自开发版。这是怎么回事?!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您已告诉我们.htaccess文件的位置,但您没有告诉我们.htpasswd文件的位置。根据{{​​3}}上的Apache文档:

  

语法: AuthUserFile 文件路径

     

文件路径是用户的路径   文件。如果不是绝对的(,如果   它不是以斜线开头的,它是   相对于ServerRoot处理。

换句话说,它正在.htpasswd之类的地方寻找/etc/apache2/.htpasswd。因此,要么将.htpasswd文件移动到那里,要么使指令包含文件的绝对路径,例如:

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

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