Nginx로 "Apache Alias"와 비슷한 위치를 설정하려고했지만이 폴더에서 PHP 스크립트를 처리 할 수 없습니다. 내가 다른 솔루션을 시도했지만 그들 중 누구도이 작동하지 않습니다Nginx - 다른 디렉토리와 PHP에 루트가있는 위치
/var/www
+- dev/public/ <-- This is my normal Web root : "/"
| +- assets/
| | +- app.css
| | +- app.js
| |
| +- index.php
| +- favicon.png
|
+- cut/public/ <-- This must like an "Apache Alias" : "/cut"
+- assets/
| +- app.css
| +- app.js
|
+- index.php
+- other_other_file.php (why not)
:
여기 (데브 환경) 내 폴더 구조입니다. 이것으로
server {
listen 80;
server_name _;
root /var/www/dev/public/;
index index.php index.html;
autoindex on;
# Logs
rewrite_log on;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
# Serving files
location/{
try_files $uri $uri/ @php;
}
location /cut {
root /var/www/cut/public;
try_files $uri $uri/ @php;
}
# PHP
location @php {
rewrite ^(.*)/?$ /index.php$is_args$args last;
}
location ~* \.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
, 내 cut/public/
폴더의 모든 함유량 dev/public/index.php
로 리디렉션 및 (원인 나는 가정, try_file
의) 해석 : 여기
최선 Nginx의 구성입니다.
귀하의 도움이 환영받을만한 이유입니다.
최종 솔루션
@의 대답 리처드 스미스는, 여기에 구현 된 솔루션입니다 후 :
server {
listen 80;
server_name _;
root /var/www/dev/public/;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location ^~ /cut {
rewrite ^/cut/?(.*)$ /cut/public/$1 last;
}
location ^~ /cut/public {
root /var/www/;
try_files $uri $uri/ /cut/index.php$is_args$args;
location ~* \.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
location/{
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* \.php(/|$) {
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
니켈 수소, I'try이 있지만'컷/public' 비 PHP 파일에 대해 무엇을? 'try_file'이 작동할까요? (왜냐하면 루트는'/ var/www/cut/public'이 아닌'/ var/www'가 되었기 때문입니다)? – Akarun
예. 정적 파일에 대한 URI는'/ cut/assets/app.js'이며 첫 번째 블록에 의해'/ cut/public/assets/app.js'로 자동 변경되고'/ var/www/cut/public/assets/app.js'를'root' 및'try_files' 지시자로 대체합니다. –
네, 일합니다. 그러나'/ cut'에 문제가 있습니다 :이 호출은 리디렉션을하고'/ cut/public'을 URI로받습니다. 아마 내가 PHP 백엔드를 호출하기 전에 그것을 제거해야합니까? – Akarun