【问题标题】:Using htaccess to force https not working for full urls with htpasswd使用 htaccess 强制 https 无法使用 htpasswd 处理完整的 url
【发布时间】:2013-06-08 22:47:39
【问题描述】:

我目前正在使用 htaccess 来强制我的 apache2 服务器上的所有 http 请求转到 https。 https已设置并正常工作。如果我只使用基本域名(例如:http://mydomain.com),htaccess 重写正在工作,但是如果我执行http://mydomain.com/index.php 之类的操作,我会收到 401 错误,说我没有被授权。我应该提到我的 htaccess 还使用 htpasswd 文件将所有内容限制为授权用户。

如果不使用 http -> https 的重写,只要该人登录,http 和 https 都可以使用任何 url 正常工作。如果不是,它将要求他们登录。当我将重写放回其中不要求用户登录,只是显示一个 401 错误页面。

这是我的 htaccess 文件:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
AuthName "Enter Account Info... Or your computer will blow up!!!"
AuthType Basic 
AuthUserFile /<censored>/.htpasswd 
AuthGroupFile /dev/null 
require user <censored>

没有那些重写行,一切正常。对 http 或 https 的请求将正常运行,但对基域以外的任何内容使用重写似乎在某处中断。

我尝试了各种我在网上找到的重写规则,都给出了相同的结果,对于基本 url 工作正常,而不是直接页面链接。

【问题讨论】:

  • 目前我已经更改了 htaccess 并删除了重写规则,而是使用..if($_SERVER["HTTPS"] != "on") 将其放置在我的 php 代码中的几个关键位置 .... 这种方式似乎有效对于我在网站上使用的任何网址,包括 http 和 https。如果我最初使用 http,它确实会强制双重登录,但目前这是可以接受的。

标签: .htaccess mod-rewrite https apache2 .htpasswd


【解决方案1】:

我有类似的问题,这对我有用。

在您的 httpd.conf 中,在虚拟主机下,确保两者都有:

服务器名称 domain.com

ServerAlias www.domain.com

VirtualHost *:80 和 VirtualHost *:443 中的两者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2018-03-18
    • 2020-08-30
    • 1970-01-01
    • 2013-05-31
    • 2017-08-22
    • 2014-01-20
    相关资源
    最近更新 更多