我正在尝试将 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/otherfolder
otherfolder
/data/mywebsite/blog
cd /data/mywebsite
ln -s /home/otherfolder/ ./
mv ./otherfolder blog
请注意,如果出现 404,则可能需要授予用户nginx
访问目录的权限。