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 / 问题 / 429634
Accepted
DrStalker
DrStalker
Asked: 2008-09-19 17:19:55 +0800 CST2008-09-19 17:19:55 +0800 CST 2008-09-19 17:19:55 +0800 CST

限制 Apache 仅允许使用 SSL 访问某些目录

  • 772

我有一个带有 SSL 证书的 Apache 2.2 服务器托管了几个应该只能使用 SSL 访问的服务。

即:应该允许https://myserver.com/topsecret/而http://myserver.com/topsecret/应该被拒绝,或者,理想情况下,重定向到 https。 http://myserver.com/public不应有此限制,并且应该使用 http 或 https。
允许/拒绝 http 的决定是在顶级目录中做出的,并影响其下的所有内容。

是否可以在 Apache 配置中放置一个指令来限制以这种方式访问​​?

apache-2.2 ssl https
  • 6 6 个回答
  • 86016 Views

6 个回答

  • Voted
  1. Best Answer
    Thomas
    2008-09-19T17:24:54+08:002008-09-19T17:24:54+08:00

    SSLRequireSSL指令正是您要查找的内容。

    如果您不使用虚拟主机,则在您的<VirtualHost>, 或顶层:

    <Directory /topsecret>
      SSLRequireSSL
    </Directory>
    

    或者在.htaccess:

    SSLRequireSSL
    
    • 41
  2. who
    2008-09-19T17:25:02+08:002008-09-19T17:25:02+08:00

    在全局配置中,您可以使用:

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{HTTPS} !on
       RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
    </IfModule>
    

    同样,您可以在安全目录树的第一个目录中使用 .htaccess 文件:

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{HTTPS} !on
       RewriteRule .* https://%{HTTP_HOST}/%{REQUEST_URI} [R=301,L,QSA]
    </IfModule>
    

    最后一个也可以放在全局或虚拟主机配置中的目录指令中。

    • 8
  3. Robert
    2015-12-22T05:54:01+08:002015-12-22T05:54:01+08:00

    有人提到了 SSLRequireSSL,但我认为它本身并不能正常工作,而且我还没有找到一个成功的例子。推荐的方法是https://wiki.apache.org/httpd/RedirectSSL我已经应用了它并且效果很好!

    • 2
  4. Magsol
    2008-09-19T17:27:18+08:002008-09-19T17:27:18+08:00

    或者,您可以使用服务器端语言为您进行处理,而不是使用 Apache 的配置选项(如果您可能无法访问服务器的配置)。

    例如,对于 PHP:

    if (!isset($_SERVER['HTTPS'])) {
      // put your redirect here
      header('Location: http://myserver.com/public');
    }
    

    (尽管请注意 - 如果您在 Microsoft IIS 上使用 ISAPI,如果请求未通过 HTTPS 路由,则 $_SERVER['HTTPS'] 变量的值将为“关闭”)

    • 1
  5. Chris
    2008-09-19T17:22:36+08:002008-09-19T17:22:36+08:00

    假设您使用的是 VirtualHost 指令,

    在拒绝访问的非 ssl 虚拟主机中放置一个目录指令。

    然后,在授予访问权限的 ssl 虚拟主机中放置一个目录指令。

    • 0
  6. Jason Wadsworth
    2008-09-19T17:24:16+08:002008-09-19T17:24:16+08:00

    我一直在 .htaccess 文件中完成此 mod_rewrite,尽管您也应该能够在主配置文件中完成它。

    这是一个指南,其中包含实现此目的的几种方法: Smart HTTP and HTTPS RewriteRule Redirects

    • 0

相关问题

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

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

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

  • PHP 作为 CGI 还是 Apache 模块?

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

Sidebar

Stats

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

    限制 Apache 仅允许使用 SSL 访问某些目录

    • 6 个回答
  • Marko Smith

    我如何告诉 Apache 使用哪个 PHP?

    • 5 个回答
  • Marko Smith

    运行 Oracle SQL 脚本并通过命令提示符退出 sqlplus.exe

    • 11 个回答
  • Martin Hope
    DrStalker 限制 Apache 仅允许使用 SSL 访问某些目录 2008-09-19 17:19:55 +0800 CST
  • Martin Hope
    Sam McAfee 我如何告诉 Apache 使用哪个 PHP? 2008-12-23 18:15:17 +0800 CST
  • Martin Hope
    JoshL 运行 Oracle SQL 脚本并通过命令提示符退出 sqlplus.exe 2008-09-23 15:33:09 +0800 CST
  • Martin Hope
    Joel Spolsky 有没有可以跟踪我拥有的所有域名的网站? 2008-08-02 08:37:51 +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