我无法重定向我的示例.com请求www.example.com现在它们都是不同的网站,但指向同一个应用程序。
背景:
我已经在 Openshift ver. 2 上安装了 php 7 和 nginx,使用这。我为部署的应用添加了2个别名,如下:
- 应用程序URL:myapp.rhcloud.com;域名:www.example.com
- 应用程序URL:myapp.rhcloud.com;域名:example.com
我还在 CNAME 中添加了以下 DNS 详细信息:
- 名称:www.example.com;值:myapp.rhcloud.com
- 名称:@;值:www.example.com
我的 nginx 配置文件(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;
我尝试在我的 nginx 配置文件中添加另一个服务器块,如下所示:
server {
server_name example.com;
return 301 https://www.example.com$request_uri;
}
然而我不确定应该用什么来代替example.com。
答案1
我没有使用 Openshift,但我觉得您的 DNS 设置有问题,您在其中为根域创建了 CNAME:
名称:@;值:www.example.com
根据 DNS 规范,您无法为根域创建 CNAME 记录。即使您的 DNS 服务器允许您这样做,也是行不通的。
查看这个问题看看为什么不允许这样做。
答案2
就 DNS 而言,正如另一个答案所指出的那样,您无法执行@ CNAME www
,即无法从根指向子域。但是,执行相反的操作,www CNAME @
即从子域指向根,应该是完全可以接受的,并且不必与域的 Web 端表示方式对称(例如,从网站角度来看,您仍然可以从根指向子域,即使您在 DNS 端执行完全相反的操作)。
就网站方式而言,将两个server
定义放在同一个文件中似乎是有意义的,您只需在其中一个服务器www.
前面手动添加前缀,例如。<%= ENV['OPENSHIFT_APP_DNS'] %>
server_name www.<%= ENV['OPENSHIFT_APP_DNS'] %>;
或者,尽管这不是最有效的解决方案,但您也可以使用if
单个server
上下文中的语句(例如,带有的语句server_name .example.com;
)进行条件重定向:
if ($host != "www.example.com") {
rewrite ^ http://www.example.com$request_uri? redirect;
}
或者,如果您更喜欢漂亮但效率较低的代码,您也可以使用正则表达式:
if ($host !~ "^www\.") {
rewrite ^ http://www.$host$request_uri? redirect;
}