Я не могу перенаправить свой example.com просьба к www.example.com и теперь это разные веб-сайты, указывающие на одно и то же приложение.
Я установил php 7 с nginx на Openshift ver. 2 с использованием этот. Я добавил 2 псевдонима для развернутого приложения, а именно:
Я также добавил в CNAME следующие детали DNS:
Мой файл конфигурации 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.
Что касается DNS, как указано в другом ответе, вы не можете сделать @ CNAME www
, т.е. не может указывать из корня на субдомен. Однако, делая наоборот, www CNAME @
, т. е. указание от поддомена обратно к корню, должно быть полностью приемлемым и не обязательно должно быть симметричным тому, как представлена веб-сторона домена (например, с точки зрения веб-сайта вы все равно можете указать из root в поддомен, даже если вы делаете прямо противоположное на стороне 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;
}
Я не использую Openshift, но мне кажется, что что-то не так в ваших настройках DNS, где вы создали CNAME для своего корневого домена:
Название: @; Значение: www.example.com
Согласно спецификациям DNS вы не можете создать запись CNAME для своего корневого домена. Даже если ваш DNS-сервер позволяет вам это делать, это не сработает.
Проверять, выписываться этот вопрос чтобы понять, почему это запрещено.