我不能将我的example.com请求redirect到www.example.com ,现在他们都是不同的网站,指向同一个应用程序。
我已经在Openshift版本上安装了使用nginx的php 7。 2使用这个 。 我为已部署的应用程序添加了两个别名,如下所示:
我还在CNAME中添加了以下DNS详细信息:
我的nginxconfiguration文件(erb)如下:
server { root <%= ENV['OPENSHIFT_REPO_DIR'] %>/www; listen <%= ENV['OPENSHIFT_PHP_IP'] %>:<%= ENV['OPENSHIFT_PHP_PORT'] %>; server_name <%= ENV['OPENSHIFT_APP_DNS'] %>; index index.php index.html index.htm <%= ENV['NGINX_EXTRA_INDEX'] %>; set_real_ip_from <%= ENV['OPENSHIFT_PHP_IP'] %>; real_ip_header X-Forwarded-For;
这变成:
server { root /path/to/my/app-root/folder/; listen 127.11.2.1:8080; server_name myapp.rhcloud.com; index index.php index.html index.htm ; set_real_ip_from 127.11.2.1; real_ip_header X-Forwarded-For;
我试图在我的nginxconfiguration文件中添加另一个服务器块,如下所示:
server { server_name example.com; return 301 https://www.example.com$request_uri; }
但是我不确定我应该用什么来代替example.com。
我不使用Openshift,但在我看来,你的DNS设置中有一些错误,你为你的根域创build了一个CNAME:
名称: @; 价值:www.example.com
根据DNS规范,您不能为您的根域创buildCNAMElogging。 即使你的DNS服务器允许你这样做,它也不会工作。
看看这个问题 ,看看为什么不允许。
就DNS而言,正如另一个答案所指出的那样,你不能做@ CNAME www ,也就是说,不能从根指向一个子域。 然而,相反, www CNAME @ ,即从一个子域指向根,应该是完全可以接受的,并且不必与域的networking端表示方式是对称的(例如,即使你在DNS方面做了相反的事情,你仍然可以从根目录指向一个子域名)。
就网站的方式而言,似乎将两个server定义放在同一个文件中是有意义的,在这个文件中你只需手动为www.前缀www. 就在服务器之一的<%= ENV['OPENSHIFT_APP_DNS'] %>之前,例如, server_name www.<%= ENV['OPENSHIFT_APP_DNS'] %>; 。
或者,虽然这不是最有效的解决scheme,但也可以在单个server上下文中使用if语句执行条件redirect(例如,使用server_name .example.com; ):
if ($host != "www.example.com") { rewrite ^ http://www.example.com$request_uri? redirect; }
或者,如果您宁愿使用漂亮但效率较低的代码,也可以使用正则expression式:
if ($host !~ "^www\.") { rewrite ^ http://www.$host$request_uri? redirect; }