Try_filesを使用して「スーパーキャッシュ」->ファイル->モジュールパターンを組み合わせて作成しようとしています(「スーパーキャッシュ」という用語はwordpressスーパーキャッシュと同様の方法です)から取得しています)。
キャッシュに適用できるファイルは、「cache」フォルダー内にあります。
これらの場所のいずれかにファイルが存在する場合は、ファイルを提供する必要があります。
location / {
try_files /$cache_dir$uri /$cache_dir$uri/ $uri $uri/ /index.php;
}
アドレス 'domain.com/css/style588.css'の例
/css/style588.css
を探します/css/style588.css
/index.html&.phpを探します/css/style588.css
を探します/css/style588.css
/index.html&.phpを探します/index.php
私はそれを以下の設定で動作させることを試みました。私は何が間違っているのですか?
server {
## index index.html index.php (defined in http block, works)
server_name domain.com;
root /srv/www/domain.com/public_html;
## cache directory ##
set $cache_dir 'cache';
## no cache if post ##
if ($request_method = POST) {
set $cache_dir 'null dir';
}
## 1.cache -> 2.file -> 3.pattern ##
location / {
try_files /$cache_dir$uri /$cache_dir$uri/ $uri $uri/ /index.php;
}
## .php (set cgi.fix_pathinfo=0 in php.ini, especially if php is on another machine) ##
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
上記の設定で試した例
domain.com:(403 Forbidden)
public_html/index.php
は提供されません。
-
domain.com/non_existing_folder:(OK)
public_html/index.php
が提供されます。
-
domain.com/folder_exists_in_cache/:(OK)
public_html/cache/folder_exists_in_cache/index.html
が提供されます。
-
domain.com/folder_exists_in_cache:(リダイレクト)(末尾のスラッシュなし)
ヘッダー301を永続的にリダイレクトします。 public_html/cache/folder_exists_in_cache/index.html
が提供されます。
ただし、URLはdomain.com/cache/folder_exists_in_cache/
と表示されます
-
ri domain.com/cache/existing_empty_folder:(403 Forbidden)
public_html/index.php
は提供されません。
-
403禁止を回避するにはどうすればよいですか(末尾にスラッシュがなく、フォルダーがキャッシュに存在する場合のリダイレクト)
フォルダにアクセス許可を設定しようとしましたが、同じ結果になりました。
ご協力いただきありがとうございます!
これは機能するはずです:
location ~ \.php$ {
try_files $uri =404;
...
}
location = / {
try_files /nonexistent /index.php?q=$uri&$args;
}
location / {
try_files $cache_dir$uri $cache_dir$uri/index.html $uri $uri/index.html /index.php?q=$uri&$args;
}