【问题标题】:Redirect ip address to https server name将ip地址重定向到https服务器名称
【发布时间】:2021-12-05 14:41:35
【问题描述】:

所以这是我的conf:

<VirtualHost *:80>
  <Directory /var/www/html/webserver/public>
      Allow From All
      AllowOverride All
      Options -Indexes
  </Directory>

  DocumentRoot /var/www/html/webserver/public
  ServerName ./install.sh
</VirtualHost>

<VirtualHost *:80>
  <Directory /var/www/html/webserver/public>
      Allow From All
      AllowOverride All
      Options -Indexes
  </Directory>

  DocumentRoot /var/www/html/webserver/public
  ServerName test.com
  ServerAlias www.test.com
  Redirect permanent / https://test.com/

  RewriteEngine on
  #RewriteBase /
  RewriteCond %{SERVER_NAME} =www.test.com [OR]
  RewriteCond %{SERVER_NAME} =test.com
  RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost *:443>
      <Directory /var/www/html/webserver/public>
          Allow From All
          AllowOverride All
          Options -Indexes
      </Directory>
    
      DocumentRoot /var/www/html/webserver/public
      ServerName test.com
      ServerAlias www.test.com
      SSLCertificateFile /etc/letsencrypt/live/test.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/test.com/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
    </VirtualHost>
</IfModule>

这非常适用于 http -> https 重定向。例如 test.com 或 http://test.com 重定向到 https://test.comwww.test.com 不起作用(我不知道为什么?),我会得到一个 404 页面。下一件大事,假设我的网络服务器的 ip 是 12.23.45.67 - 我必须如何更改我的配置文件,所以这个 ip 也重定向到https://test.com

基于@Don't Panic 帖子的新 .conf 文件:

<VirtualHost *:80>
  <Directory /var/www/html/webserver/public>
      Allow From All
      AllowOverride All
      Options -Indexes
  </Directory>

  DocumentRoot /var/www/html/webserver/public
  ServerName test.com
  ServerAlias www.test.com

RewriteEngine on
#RewriteBase /
RewriteCond %{SERVER_NAME} =www.test.com [OR]
RewriteCond %{SERVER_NAME} =test.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost *:80>

ServerName XX.XX.XX.XX
ServerAlias www.test.com
DocumentRoot /var/www/html/webserver/public


RewriteEngine on
RewriteCond %{SERVER_NAME} =test.com [OR]
RewriteCond %{SERVER_NAME} =www.test.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

</VirtualHost>

【问题讨论】:

  • 这里似乎有些复制粘贴错误? 1)没有https配置。 2)ServerName ./install.sh 无效,我认为; 3)ServerAlias www.test.comServerName一模一样就没有意义?
  • @Don'tPanic 谢谢!是的,应该是ServerName test.comServerAlias www.test.com。尽管如此,问题仍然存在。我用 https (ssl) 配置更新了我的第一篇文章。
  • 1) 第一个虚拟主机块(我昨天指出的无效ServerName)应该被删除,AFAICT。 2) http vhost 末尾的RewriteCond 内容已经与Redirect permanent 行所做的相同——不要同时包含它们,删除Redirect permanent。 3) 修复ServerAlias 后,您是否重新启动了 Apache,并清除了浏览器缓存? “www.test.com 不起作用” - http 还是 https?
  • 关于单独的重定向 IP 问题 - SO 上有很多重复项(例如 stackoverflow.com/a/67920979)。但是如果 Apache 没有收到带有请求的主机名(例如对 IP 的请求),它将匹配它找到的第一个虚拟主机。如果那是你上面的 http vhost,它已经重定向了,没什么可做的。
  • @Don'tPanic 1) 我删除了第一个 vhost 块,问题还是一样。,没有从 IP 地址 XX.XX.XX.XX 重定向到域名test.com 2) 我删除了@ 987654342@,问题还是一样 3)我总是在编辑 .conf 文件后重新启动 apache,还清除了缓存,并且我使用不同的浏览器 4)http 和 https 我更新了我的开始帖子,并根据你的新 .conf最后一个帖子。总而言之,从 test.com 或 test.com 重定向到 test.com 就像一个魅力,从 XX.XX.XX.XX 或 www.test.com 重定向到 404

标签: apache https


【解决方案1】:

所以我的最终解决方案如下所示:

<VirtualHost *:80>
  <Directory /var/www/html/webserver/public>
      Allow From All
      AllowOverride All
      Options -Indexes
  </Directory>

  DocumentRoot /var/www/html/webserver/public
  Redirect / https://test.com
</VirtualHost>

这几乎适用于所有重定向,但不适用于www.test.com - 这是一个好的解决方案吗?不得。但它是一种有效的方法。

【讨论】:

  • 这只会重定向/。对/some-page 或站点根目录以外的任何请求都不会重定向。您之前的 RewriteRule 将重定向所有请求,这是更好的解决方案。
猜你喜欢
  • 2015-04-15
  • 2016-01-09
  • 2019-07-21
  • 2018-03-20
  • 2021-03-25
  • 1970-01-01
  • 2015-07-27
  • 2021-04-14
  • 2020-04-07
相关资源
最近更新 更多