- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑:我从 VirtualHosts 中取出了两个不起作用的域的重定向行。重新启动 Apache 后,两个站点的 HTTP 和 HTTPS 版本都按预期工作,但它不再自动重定向(很明显)。但这些完全相同的重定向规则对 sidmandesign.com 工作正常
我正在使用 Ubuntu 将我的网络服务器从 IIS 服务器迁移到 LAMP 堆栈。我使用 certbot 为我的三个域安装了三个 SSL 证书。 Certbot 添加了一个 -le-ssl.conf 文件到 virtualhosts 目录,所以我现在在那里(所有内容都在/etc/apache2/sites-enabled/目录中,并在 apache.conf 中正确包含):
sidmandesign.conf:
<VirtualHost *:80>
ServerName www.sidmandesign.com
ServerAlias sidmandesign.com
DocumentRoot "/var/www/html/Sidman Designs/"
RewriteEngine on
RewriteCond %{SERVER_NAME} =sidmandesign.com [OR]
RewriteCond %{SERVER_NAME} =www.sidmandesign.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
sidmandesign-le-ssl.conf:
<VirtualHost *:443>
ServerName www.sidmandesign.com
ServerAlias sidmandesign.com
DocumentRoot "/var/www/html/Sidman Designs"
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/sidmandesign.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sidmandesign.com/privkey.pem
</VirtualHost>
augustinebuilders.conf:
<VirtualHost *:80>
ServerName www.augustinebuilders.com
ServerAlias augustinebuilders.com
DocumentRoot "/var/www/html/augustine/"
RewriteEngine on
RewriteCond %{SERVER_NAME} =augustinebuilders.com [OR]
RewriteCond %{SERVER_NAME} =www.augustinebuilders.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
augustinebuilders-le-ssl.conf:
<VirtualHost *:443>
ServerName www.augustinebuilders.com
ServerAlias augustinebuilders.com
DocumentRoot "/var/www/html/augustine"
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/augustinebuilders.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/augustinebuilders.com/privkey.pem
</VirtualHost>
salvagedserendipity.conf:
<VirtualHost *:80>
ServerName www.salvagedserendipity.com
ServerAlias salvagedserendipity.com
DocumentRoot "/var/www/html/salvagedserendipity/"
RewriteEngine on
RewriteCond %{SERVER_NAME} =salvagedserendipity.com [OR]
RewriteCond %{SERVER_NAME} =www.salvagedserendipity.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
salvagedserendipity-le-ssl.conf:
<VirtualHost *:443>
ServerName www.salvagedserendipity.com
ServerAlias salvagedserendipity.com
DocumentRoot "/var/www/html/salvagedserendipity"
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/salvagedserendipity.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/salvagedserendipity.com/privkey.pem
</VirtualHost>
Sidmandesign.com 工作正常,它重定向到 HTTPS,我可以看到所有内容。然而,当我尝试其他两个网站时,它们重定向到 HTTPS,但我在 Chrome 中收到 ERR_TOO_MANY_REDIRECTS 并且通用无法在 Edge/IE 中显示此页面。
当配置看起来相同时,为什么一个域可以工作而其他两个域不能工作,有什么想法吗?
最佳答案
您的 RewriteCond
语法
在你的 *:80 VirtualHost 中,删除你的 RedirectCond
和 RewriteRule
指令并添加(好吧,根据您的域进行调整!):
Redirect permanent / https://www.example.com
无需验证域名是否匹配,如果域名匹配 ServerName
,Apache 只会使用该 VirtualHost 中的配置或 ServerAlias
无论如何指令值。
还有一点,RewriteCond
不需要 =
签名(以备将来引用):
RewriteCond %{SERVER_NAME} ^www.example.com$
删除 DocumentRoot
在 VirtualHost *:80
因为您从不为 *:80 VirtualHost 提供任何内容,您应该删除 DocumentRoot
指令。
多个 SSL VirtualHosts 问题
对于端口 80,您可以定义许多 VirtualHosts 没问题。 Apache 将查看请求的域并使用匹配的配置。
但是对于 SSL,那是行不通的。在与浏览器完成 SSL 证书协商之前,Apache 无法读取请求的域。之后。那么它有什么作用呢?它使用它找到的第一个 *:443 VirtualHost。
解决方法是:
1 SSL 域 == 1 IP == 1 仅为该 IP 设置的 VirtualHost(即不是 *:443)。这里的问题是您可能无法访问多个地址。
1 个 SSL 域 == 1 个端口 == 1 个为该端口设置的 VirtualHost(即 *:443、*:444、...)。这里的问题是端口 443 是 https 站点的默认端口,因此需要在浏览器中明确请求其他站点,这对客户端来说是违反直觉的。如果您的 Apache 前面有网络基础设施,您可以在那里更改端口。 https://www.example.com
发送至apache:443
, https://www.example2.com
发送至apache:444
,等等。但这需要在流量到达 Apache 之前完成。
在 Apache 中使用 SNI ( https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI)。
你的情况
http://<SOMEDOMAIN>
, 在端口 80 上发送到正确的 VirtualHost。https://<SOMEDOMAIN>
,在端口 443 上。它应该。/etc/letsencrypt/live/sidmandesign.com/fullchain.pem
是发送到客户端浏览器的那个。您可以通过查看浏览器控制台并检查证书来验证这一点。最后
对于 “Chrome 中的 ERR_TOO_MANY_REDIRECTS”,请查看控制台(F12,网络选项卡,选中保留日志)。您将看到 Chrome 获得的每个重定向。这样你就会看到循环的内容。我的猜测是“=”符号把事情搞砸了。
关于apache - 安装 LetsEncrypt 证书后 VirtualHost 导致 ERR_TOO_MANY_REDIRECTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52935109/
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我有许多 Apache VirtualHosts,我为每个虚拟主机使用专用的 SSLCertificateFile。 这是一个 VirtualHost 的配置示例: ServerName
好吧...我尝试使用 ServerName something.ooo ServerAlias www.something.ooo 但看起来.. 您不能使用 ServerAlias,除非它在 中
我正在尝试使用“ngrok http -host-header = client1.dev 80”在我的站点目录中建立一个客户端站点,访问该URL时得到404。经过一些试验后,如果我将index.ht
我正在尝试为 mampstack(不是 MAMP)设置一个虚拟主机。这是我到目前为止所做的: 在我的 httpd.conf 文件中,我检查了 Listen 8080 这是正确的(我正在监听端口 808
Noob Here.. 我的 Ubuntu 机器上有以下文件夹结构 /var/www/ /folder1 /folder2 现在我想将我的 url xyz.com 重
我有一个带有 Apache 的 debian 设置。我禁用了“默认”站点并暂时添加了一个站点。 我想禁止访问除各种虚拟主机下的所有内容。 DocumentRoot /var/www/mycomp
我在我的电脑上设置了几个 VirtalHosts。我想使用我的 comp 的 ip 地址从另一台 PC 访问我目前正在处理的站点,但是我尝试过的每个配置都会将我带到不同的虚拟主机(实际上是我设置的第一
我想在本地机器上为该主机创建虚拟主机和子域,这样我的 localhost 就可以作为一个网站,就像我不需要在 url 栏中写 localhost 一样: localhost ---> mysite.
我尝试在同一个 VPS 上托管多个域,使用 HHVM 为页面提供服务。 我想知道如何编写 VirtualHost 以便在我的/var/www 目录中指向正确的文件夹? 例如 xxx.domain.co
我一直在阅读有关 Vagrant 的内容,我发现它对我的开发非常有用。我目前正在管理一系列服务(邮件、Web、LDAP、文件共享等),并且经常其中一个服务出现故障并需要快速备份。是否可以(并推荐)使用
我的 tomcat 中有 server.xml 文件的以下部分。 xyz-mydomain1.com abc.mydomain1.com 有什么方法可以通过对我可以放
我在 linux 环境中运行 apache2 网络服务器。我想将用户重定向到自定义错误页面。所以创建了错误页面并在 htdocs 中创建了符号链接(symbolic link),也是这样。静态文件->
我的 tomcat 中有 server.xml 文件的以下部分。 xyz-mydomain1.com abc.mydomain1.com 有什么方法可以通过对我可以放
我更新/etc/hosts 并测试 ping,域正常工作; 我使用ampps管理工具添加域,并验证修改如下。 Options FollowSymLinks Indexes AllowOverrid
我有一个分配给主机(redmine 应用程序)的正在运行的生产网站。我需要将一个新应用程序作为子目录添加到同一主机。 这是在主机的基本文件夹中运行的 redmine 应用程序的当前虚拟主机配置。
我有一个在 Debian 上运行的亚马逊 EC2。还有一个域名:flavienm.com服务器运行 Apache 2.4.10 我尝试设置一个子域:eyewall:flavienm.com 在我的可用
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我将 apache 配置到我服务器的主域,如果只有那个域,它就可以正常工作: 在 httpd.conf 中: Listen maindomain.com:80 DocumentRoot "/home/
在我的 Windows 7 中一切正常。 问题是当我添加 时domain1.com 作为 VirtualHost,localhost 的 DocumentRoot 更改为 VirtualHost 的
我是一名优秀的程序员,十分优秀!