Nginx поместил другой веб-сайт впереди

У меня есть веб-сайт на wordpress, обслуживаемый nginx:

server {
  listen 80;
  server_name my_wordpress.example.com;
  root /var/www/wordpress;
  index index.php;
  location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param REQUEST_URI $request_url;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
  } 
}

Я хочу разместить один простой веб-сайт, состоящий только из одного файла, скажем, index.php , чтобы временно захватить его корневой URL-адрес моего домена, сохраняя при этом доступ к веб-сайту wordpress по другому URL-адресу.

Как лучше всего добиться этого?

Я пошел в направлении установки переменной, когда пользователь обращается к URL-адресу, направленному на сайт wordpress :

location /original-site {
  set $request_url $request_uri;
  set $original_site "true"; 
  rewrite ^/original-site$ /; }

if ($original_site = "true") {
  set $request_url /; }

перенаправляет корневой URL-адрес в другое место :

if ($original_site != "true") {
  rewrite ^/$ /new_website redirect; }

Я использую $ request_url в php:

fastcgi_param REQUEST_URI $request_url;

Я пока не очень успешен, я могу найти ошибки и настроить этот подход, существует ли более элегантный способ, как это сделать?

0
задан 14 March 2016 в 15:09
1 ответ

Если вы уверены, что хотите обслуживать только простой индексный файл при обращении к корневой части вашего сайта, почему бы вам не добавить для этого только местоположение = /? Без каких-либо переменных, перепишите или if (помните лучше искать решение без if).

Вся серверная часть может выглядеть следующим образом:

server {
  listen 80;
  server_name my_wordpress.example.com;
  root /var/www/wordpress;
  index index.php;

  location = / {
      # I'd add an expires 10s; or whatever
      return 302 original-site;
  }

  location = /original-site {
    root /var/www/a_special_other_path; # where you stored the special index file to temporarily serve
    try_files index.php index.html;
  }

  location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_param REQUEST_URI $request_url;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
  } 
}

Таким образом, если кто-то попытается получить доступ именно к my_wordpress.example.com, то он получит файл индекса из специального каталога. Но все остальные обращения (к my_wordpress.example.com/anything.php) будут обработаны другим блоком локации.

Если вы хотите временно обслуживать более чем простой index.html (например. ), то в блоке location = / можно использовать те же параметры, что и в блоке location ~ \.php$.

И как только вы закончите, просто прокомментируйте расположение location = /, и вы вернетесь к первоначальной конфигурации.

.
0
ответ дан 5 December 2019 в 10:39

Теги

Похожие вопросы