我一直在遍尋各地,試圖找到解決方案來從不同的子目錄內提供靜態內容。這是我的意思。所有的靜態內容位於:從動態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