방금 Apache에서 nginx로 옮겼는데 작동하지 않는 것 같은 일부 구성 설정으로 인해 어려움을 겪고 있습니다. nginx 규칙으로 변환하려는 이전 .htaccess 파일의 규칙이 있습니다.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(js|css)/([a-z0-9\.]+)\.(js|css)$ $1/index.php?hash=$2 [L,QSA]
RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|s?html|css|js|cgi)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
알 수 있듯이 이는 존재하지 않지만 지정된 패턴을 따르는 각 파일이 PHP 스크립트에 의해 제공되어야 함을 의미합니다. 더 이상의 처리는 없습니다. 그런 다음 정적이지 않고 디스크에 존재하지 않는 각 파일에 대해 기본 index.php 파일로 보냅니다.
나는 정적 파일을 직접 제공하는 방법을 알고 있으며 첫 번째 규칙을 만드는 방법을 알고 있습니다. 내가 해결하는 방법을 모르는 것은 이 두 조건이 함께 작동하도록 하는 것입니다. 지금까지 내가 가진 것은 다음과 같습니다.
location / {
try_files $uri $uri/ /index.php;
}
location /js/ {
rewrite ^/js/([a-z0-9.]+).js$ /js/index.php?hash=$1 break;
}
location /css/ {
rewrite ^/css/([a-z0-9.]+).css$ /css/index.php?hash=$1 break;
}
# serve static files directly
location ~* \.(?:jpg|jpeg|gif|css|png|js|ico)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
location ~ \.php$ {
# basic settings for php files
}
앞서 말했듯이 세 가지 location
지시어를 모두 활성화하면 정적 파일이 직접 제공되지만 지정된 패턴을 따르는 스타일 또는 js 파일은 404 오류를 반환합니다(특정 위치에서 찾을 수 없기 때문에). 정적 파일 지시어에 주석을 달고 스크립트에서 제공해야 하는 css/js에 대한 다시 쓰기 규칙을 활성화하면 css/js 디렉터리 내의 정적 파일은 제공되지 않지만(빈 페이지가 반환됨) 다른 모든 정적 파일은 제공됩니다. 정상적으로 서비스됩니다.
더 이상 무엇을 해야할지 모르겠습니다. 나는 이 문제를 해결하는 방법을 인터넷에서 찾는 데 몇 시간을 보냈지만 시도한 모든 것이 작동하지 않았습니다.
답변1
해결책:
location / {
try_files $uri $uri/ /index.php;
}
# serve static files directly
location ~* \.(?:jpg|jpeg|gif|css|png|js|ico)$ {
access_log off;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri @fallback;
}
location @fallback {
rewrite ^/(js|css)/([a-z0-9.]+)\.(js|css)$ /$1/index.php?hash=$2;
}
location ~ \.php$ {
# basic settings for php files
}