将特定 URL 重定向到不同的目录

将特定 URL 重定向到不同的目录

我正在尝试将 mywebsite.com/some-directory 重定向到 mywebsite.com 根目录以外的其他目录。我使用了以下配置:

server {
  server_name mywebsite.com www.mywebsite.com;
  listen 80;

  root /path/to/the/root/directory/of/mywebsite;
  index index.php index.html index.htm get.html ;

  ssl on;
  listen 443 ssl;
  ssl_certificate my_ssl.crt;
  ssl_certificate_key my_key.key;

  location /some-directory {
    root /path/to/directory;
  }
}

该配置加载html文件,但不会加载同一目录中的资产。

我发现了一个类似问题(或者可能是完全相同的),但问题不同。我可以自己修复它。

我也尝试使用上面答案中建议的别名;但徒劳无功。

我的里面/path/to/directory/some-directory,nginx 可以很好地提供 index.html 文件。当 HTML 文件尝试访问其中的文件(或文件夹)时,就会出现问题/path/to/directory/some-directory。它们都返回 404 Not Found。

我可能做错了什么?

答案1

我发现了这个问题的重复,但它是在 StackOverflow 上,而不是 ServerFault 上。

https://stackoverflow.com/questions/21628056/virtual-directory-counterpart-in-nginx

要将 mywebsite.com/some-directory 重定向到与网站根目录不同的目录,您可以使用类似下面的代码。

root /path/to/the/root/directory/of/mywebsite;
index index.php index.html index.htm get.html;

location /some-directory/ {
    alias /path/to/some-directory/;
        index index.php;

        try_files $uri $uri/ /index.php?$args;
}

另请阅读有关类似问题的帖子。

答案2

在网上搜索了各种解决方案,但没找到。想出了一个可行的解决方案。

假设您的网站的根目录设置为/data/mywebsite,因此对 的请求www.mywebsite.com/a/b.html会得到/data/mywebsite/a/b.html响应。假设我们希望所有以 开头的请求都www.mywebsite.com/blog转到不同的目录,即/home/otherfolder。因此对 的请求www.mywebsite.com/blog/first.html会得到/home/otherfolder/first.html响应。

在上述情况下,您将在指向的目录symlink中创建一个软文件。因此对于 nginx 来说,好像的所有文件都存在于其中。/data/mywebsite/home/otherfolderotherfolder/data/mywebsite/blog

cd /data/mywebsite
ln -s /home/otherfolder/ ./
mv ./otherfolder blog

请注意,如果出现 404,则可能需要授予用户nginx访问目录的权限。

相关内容