Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS Beanstalk使用Apache将www重定向到非www_Apache_Amazon Web Services_Amazon Elastic Beanstalk - Fatal编程技术网

AWS Beanstalk使用Apache将www重定向到非www

AWS Beanstalk使用Apache将www重定向到非www,apache,amazon-web-services,amazon-elastic-beanstalk,Apache,Amazon Web Services,Amazon Elastic Beanstalk,我已经部署了我的应用程序,使用Tomcat和Apache 2.4创建了AWS Beanstalk配置。我还成功地安装了Letsencrypt证书并启用了https。HTTP/2也已启用,工作正常。我唯一坚持的是将www重定向到非www。 我已尝试在war-中添加适当的配置。ebextensions\httpd\conf.d\ssl.conf,即: LoadModule ssl_module modules/mod_ssl.so LoadModule http2_module modules/mo

我已经部署了我的应用程序,使用Tomcat和Apache 2.4创建了AWS Beanstalk配置。我还成功地安装了Letsencrypt证书并启用了https。HTTP/2也已启用,工作正常。我唯一坚持的是将www重定向到非www。 我已尝试在war-中添加适当的配置。ebextensions\httpd\conf.d\ssl.conf,即:

LoadModule ssl_module modules/mod_ssl.so
LoadModule http2_module modules/mod_http2.so
Listen 443
<VirtualHost *:443>
  Protocols h2 http/1.1
  <Proxy *>
    Require all granted
  </Proxy>

  ServerName example.com
  SSLEngine             on
  SSLCertificateFile "/etc/letsencrypt/live/example.com/fullchain.pem"
  SSLCertificateKeyFile "/etc/letsencrypt/live/example.com/privkey.pem"
  SSLCipherSuite           EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
  SSLProtocol           All -SSLv2 -SSLv3
  SSLHonorCipherOrder   On

  Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
  Header always set X-Frame-Options DENY
  Header always set X-Content-Type-Options nosniff

  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://%1$1 [R=301,L]
</VirtualHost>
<VirtualHost *:80>
  ServerName www.example.com
  RewriteEngine On
  Redirect 301 / https://example.com
</VirtualHost>
LoadModule ssl\u module modules/mod\u ssl.so
加载模块http2_模块模块/mod_http2.so
听我说
协议h2 http/1.1
要求所有授权
ServerName example.com
斯伦金安
SSLCertificateFile“/etc/letsencrypt/live/example.com/fullchain.pem”
SSLCertificateKeyFile“/etc/letsencrypt/live/example.com/privkey.pem”
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All-SSLv2-SSLv3
SSLHonorCipherOrder开启
标头始终设置严格的传输安全性“最大年龄=63072000;包括子域;预加载”
标题始终设置X帧选项拒绝
标题始终设置X-Content-Type-Options nosniff
ProxyPass/http://localhost:8080/ 重试=0
ProxyPassReverse/http://localhost:8080/
代理主机
重新启动发动机
重写条件%{HTTP_HOST}^www\.(.*)$[NC]
重写规则^(.*)$https://%1$1[R=301,L]
服务器名www.example.com
重新启动发动机
重定向301/https://example.com
它实际上会重定向,但是。。。它重定向一次!然后客户端从example.com收到一个证书,下一次调用www.example.com失败,因为为没有www的资源生成了“错误”的证书。因此,SEO checkers无法通过301检查

我的问题-有没有办法用Apache配置重定向?
s3+Cloudfront是唯一的解决方案吗?

可以。因此,我终于找到了一种方法,在没有s3 bucket和Cloudfront的情况下,设置一个从www.site版本到非www的301重定向

因此,从问题描述来看,Apache可以很好地重定向资源,在浏览器获得example.com的证书后,它实际上拒绝了子域。我错过的是可以生成并使用另一个证书

第一步是生成证书:

certbot certonly -d *.example.com --manual --preferred-challenges dns
细微差别在于你必须通过挑战。它将要求向托管区域添加CNAME记录:

Please deploy a DNS TXT record under the name
_acme-challenge.domain.com with the following value:

cxAGAsIvxQggW5FRAqUJfjsnknsYBjb3

Before continuing, verify the record is deployed.
添加记录后,点击Enter按钮,您将安装证书

别忘了重新启动Apache! 干得好!www.example.com现在被重定向到example.com