使用 SSL IP 重写 Apache

标签 apache .htaccess ssl redirect mod-rewrite

在大多数情况下,我的条件在重定向到我的安全站点 https://mysite.example.com 时有效,除非用户输入 https://10.10.10.10在这种情况下,会发生证书错误,这是可以预料的。但如果用户决定继续,我想重定向到我的安全站点。这可能吗。请参阅下面我的代码。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^10\.10\.10\.10$
RewriteRule ^(.*)$ `https://mysite.example.com`/$1 [L,R=301]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

最佳答案

虽然我不确定 %{HTTP_HOST} 可用于测试 IP(如果主机是 IP,Apache 可能会认为没有主机),并假设您测试了规则从你的问题来看它没有用,肯定有改进的余地。

您的 SSL 证书仅与一个主机名相关联(除非您有通配符证书,但那将是一种边缘情况),因此了解您的网站是否通过其 IP 或其他域别名访问并不重要;如果您希望将其重定向到 https 和特定主机名,那么这一切都很重要。

顺便说一句,如果您更改 IP,则必须同时更改 DNS 和重写规则,这并不理想。

所以让我们简化一下:

RewriteEngine On
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^mysite.example.com$
RewriteRule (.*) https://mysite.example.com%{REQUEST_URI} [L,R=301]

请注意,您还需要在目标中硬编码 mysite.example.com,因为如果满足第二个条件,它可能是 IP 或错误的主机。

关于使用 SSL IP 重写 Apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45204373/

相关文章:

apache - 如何限制 Apache 只接受来自本地主机的特定 url 请求?

c++ - Microsoft C++ HTTP 服务器 API (httpapi.lib) HttpReceiveClientCertificate 函数返回 ERROR_NOT_FOUND ( 1168 )

asp.net - 配置 IIS Express 以使用 http 和 https 的默认端口进行调试

apache - 如何在 Ubuntu 上为 Apache2 配置子域?

Apache2 发送两个带有映射 "nph-"CGI 的 HTTP header

php - htaccess 301 重定向无法正常工作

apache - 使用 https 将公园域重定向到 http

java - 在 domain.xml 中添加 SSL keystore 密码作为别名

php - Ubuntu PHP - 无法启动

reactjs Route Not Found 请求的 URL