我一直在遍寻各地,试图找到解决方案来从不同的子目录内提供静态内容。这是我的意思。所有的静态内容位于:从动态URL提供静态内容
/usr/share/nginx/www/www.example.com/skin/
图片,JavaScript库和样式表恭敬的道:
/usr/share/nginx/www/www.example.com/skin/css/
/usr/share/nginx/www/www.example.com/skin/img/
/usr/share/nginx/www/www.example.com/skin/js/
每个目录css
,img
和js
有许多其他的子目录。
问题: 如果你看一下我的服务器配置,你会看到所有的请求都被index.phtml其中包括autoloader.php动态加载基于请求的URI合适的内容进行处理。
我现在面临的问题是静态内容相对路径不适合动态网址加载:
即JavaScript库的相对路径:skin/js/library/helloWorld.js
这工作: https://www.example.com/skin/js/library/helloWorld.js
这不起作用:
https://www.example.com/foo/skin/js/library/helloWorld.js
https://www.example.com/foo/bar/skin/js/library/helloWorld.js
,因为URL是完全动态的,我需要能够前/护肤/ {...}
https://www.example.com/ {任何服务与任何数量的子目录的静态内容动态子目录}数/skin/js/library/helloWorld.js
我的问题: 是否有可能MO使用$ uri忽略{any number of dynamic sub-directories}
并重写所有从/ skin/{...}到https://www.example.com/skin/ {...}的所有内容?
location ^(.*)/skin/(.*)\.(jpeg|jpg|gif|png|ico|svg|css|js)$ {
# Something like:
# rewrite^https://www.example.com/skin/{requested static content} break;
# or
# try_files /skin/{requested static content};
}
我的服务器配置:
server {
listen 80;
server_name example.com www.example.com;
rewrite^https://www.example.com$uri permanent;
}
server {
listen 443 default_server ssl;
add_header Strict-Transport-Security max-age=31536000;
add_header X-Frame-Options SAMEORIGIN;
root /usr/share/nginx/www/www.example.com;
index index.phtml;
server_name example.com www.example.com;
if ($host !~* ^www\.) {
rewrite^https://www.example.com$uri permanent;
}
location ^~ /autoloader.php {
deny all;
}
location/{
try_files $uri $uri/ /index.phtml;
}
error_page 500 502 503 504 404 403 /error.phtml;
}
可能的解决方案
这是我想避免的解决方案:
- 使用绝对路径,用于连接静态内容。 (坏域名 更改)
- 为/ skin /在我的服务器 配置中的每个子目录添加
location
配置。 (不动态) - 解析我的 index.phtml中的静态内容请求。 (看起来很凌乱......)
对不起,这篇较长的文章。我只是想澄清我的情况。多谢你们!
我不是很理解为什么不能直接从你的index.html请求像“/skin/js/library/helloWorld.js”这样的URL,它在域更改时不会受到影响。这意味着请求webroot中的文件。 – TroyCheng