Nginx 将另一个网站放在前面

Nginx 将另一个网站放在前面

我有一个由 nginx 提供服务的 wordpress 网站:

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,同时保持对另一个url上wordpress网站的访问。

实现这一目标的最佳方法是什么?

我进入了在用户访问 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; }

我在 php 中使用$request_url

fastcgi_param REQUEST_URI $request_url;

到目前为止我还没有取得很大的成功,我可能会发现错误并微调这种方法,是否存在一些更优雅的方法,如何做到这一点?

答案1

如果你确定你只想在访问你网站的根目录时提供一个简单的索引文件,为什么不只添加一个location = /呢?没有任何变量,rewrite或者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 = /块即可返回初始配置。

相关内容