Nginx:从基本域重写到子目录

Nginx:从基本域重写到子目录

我有一个博客托管在http://site.com/blog

我如何指示 nginx 将请求重写为从site.comsite.com/blog

这不应该是永久的。

答案1

location = / {
    rewrite ^ http://site.com/blog/ redirect;
}

这只会专门针对根发出请求。如果您需要捕获所有内容(重定向http://site.com/somearticle/something.htmlhttp://site.com/blog/somearticle/something.html),那么您将需要更复杂的东西:

location /blog/ {
    # Empty; this is just here to avoid redirecting for this location,
    # though you might already have some config in a block like this.
}
location / {
    rewrite ^/(.*)$ http://site.com/blog/$1 redirect;
}

答案2

尝试一下这个:

location = / {
      return 301 /blog/;
 }

关键是‘=’象征。

答案3

这对我来说不起作用。以下方法有效:

  1. 打开您网站的 NGINX 配置文件。在服务器块内,添加根目录的路径并设置文件的优先级顺序:

    root /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    
  2. 创建一个空的位置块所有其他位置块:

    location /latest {
    # Nothing in here; this is to avoid redirecting for this location
    }
    
  3. 注释掉 location / {} 块中的根目录指令并添加重定向,使其看起来像这样:

    location / {
    # root   /mnt/www/www.domainname.com;
    index  index.php index.html index.htm;
    rewrite ^/(.*)$ http://www.domainname.com/latest/$1 redirect;
    }
    
  4. 确保您的 location ~ .php$ 块将其根指向

    root /mnt/www/www.domainname.com;
    

这帮我解决了这个问题。

答案4

对于仅显示主页而不显示其他内容的情况,我将使用:

location / {           
    rewrite ^/$ /blog/ redirect;
}

其他任何内容,例如 /foo/ 都不会重定向到 /blog/ 。

相关内容