さまざまなサブディレクトリ内から静的コンテンツを提供するための解決策を見つけようとして、あちこちを検索してきました。これが私の言いたいことです。すべての静的コンテンツは次の場所にあります。
/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
も多数のサブディレクトリがあります。
問題: サーバー構成を見ると、すべての要求が、要求された URI に基づいて適切なコンテンツを動的にロードする autoloader.php を含む index.phtml によって処理されていることがわかります。
私が直面している問題は、相対パスを持つ静的コンテンツが動的 URL に読み込まれないことです。
つまり、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 は完全に動的であるため、/skin/{...} の前に任意の数のサブディレクトリを含む静的コンテンツを提供できる必要があります。
https://www.example.com/ {任意の数の動的サブディレクトリ}/skin/js/library/helloWorld.js
私の質問:{any number of dynamic sub-directories}
$uri を変更して、 /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;
}
可能な解決策
これらは私が避けたい解決策です:
- 静的コンテンツのリンクには絶対パスを使用してください。(ドメイン名の変更には不向き)
location
サーバー構成の /skin/ にサブディレクトリごとに追加します。(動的ではありません)- index.phtml 内の静的コンテンツ リクエストを解析します。(むずかしそうですね…)
長い投稿で申し訳ありません。自分の状況を明確にしたかっただけです。みんなありがとう!