2012-04-10 35 views
7
server { 
    listen  80; 
    server_name pwta; 
    root html; 

    location /test/{ 
     alias html/test/; 
     autoindex on; 
    } 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
} 

Cấu hình này hoạt động. Tuy nhiên, nếu location /test/ được thay thế, ví dụ: location /testpath/ nó không hoạt động (Không có tệp đầu vào nào được chỉ định). Tôi giả định dựa trên lời giải thích của chỉ thị bí danh rằng phần "vị trí" bị giảm và do đó /testpath/info.php sẽ dẫn đến html/test/info.php.bí danh nginx + chỉ thị vị trí

Cảm ơn mọi đề xuất.

Trả lời

10

nginx alias

server { 
    listen  80; 
    server_name pwta; 
    index index.html index.php; 
    root html; 

    location /testpath/ { 
     alias html/test/; 
    } 
    location ~ ^/testpath/(.+\.php)$ { ### This location block was the solution 
     alias html/test/;  
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$1; 
     include fastcgi_params; 
    } 
    location ~ \.php$ { 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include  fastcgi_params; 
    } 
+0

Tôi hoàn toàn không hiểu tại sao lại hoạt động, nhưng nó thực sự giải quyết được vấn đề. Bất cứ ai có thể thêm giải thích thêm về những gì đang xảy ra với khối vị trí ở giữa đó? – Brad

+0

Việc thêm 'bí danh' sẽ ghi đè lên' $ document_root' thành bất kỳ bí danh nào. Lưu ý rằng nó sẽ không ảnh hưởng đến '$ fastcgi_script_name' hoặc' $ request_filename'. Sử dụng '$ document_root' mới cùng với regex khớp với tên tệp, giải quyết tệp kịch bản. – Gajus

+0

Lưu ý khối vị trí cuối cùng không làm bất cứ điều gì khi yêu cầu nằm trong '/ testpath /'. – Gajus

8

Cả aliasroot chỉ thị được sử dụng tốt nhất với đường dẫn tuyệt đối. Bạn có thể sử dụng đường dẫn tương đối, nhưng chúng liên quan đến tùy chọn cấu hình prefix được sử dụng để biên dịch nginx và thường không phải là những gì bạn muốn.

Bạn có thể thấy điều này bằng cách thực hiện nginx -V và tìm giá trị sau --prefix=.

Chứng minh điều này cho chính mình bằng cách xem nhật ký, bạn sẽ tìm thấy lỗi "không có tệp như vậy".

+1

Lưu ý rằng phải là '-V' không phải' -v' (nên là vốn, chữ thường chỉ cho số phiên bản) – Basic

Các vấn đề liên quan