Tôi đang viết một CMS đơn giản bằng PHP. Trang (file markdown) và hình ảnh được truy cập như thế này (theo thứ tự):Các url sạch của Nginx, cách viết lại một thư mục làm đối số với try_files
example.org/?q=about.md
example.org/?i=photo.jpg
Tùy chọn, tôi muốn sử dụng các URL sạch với Nginx, để làm cho các yêu cầu tương tự như thế này:
example.org/about
example.org/photo.jpg
Tôi thích sử dụng try_files
hơn if
và rewrite
nhưng sau khi thử nghiệm hàng giờ, tôi không thể làm cho nó hoạt động.
location/{
try_files $uri $uri/ /?q=$uri.md =404;
}
location ~ \.(gif|jpg|png)$ {
try_files $uri /?i=$uri =404;
}
Tôi không hiểu tại sao mã trên không hoạt động (các url có đối số hoạt động tốt nhưng các trường hợp đẹp cho lỗi 404).
Có điều gì sai khi chuyển tên thư mục làm đối số sử dụng $uri
?
Tôi có cần phải thoát khỏi một số nhân vật kỳ lạ (ngoài chủ nhà của tôi) không?
Để được triệt để, tôi đang chạy Nginx 1.6.2, sử dụng nginx.conf chuẩn. Dưới đây là phần còn lại của khối máy chủ của tôi:
server_name example.org;
root /srv/example/;
index index.html index.htm index.php;
(...)
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
và fastcgi.conf cũng là tiêu chuẩn.
Có phải 'document_root' được đặt chính xác không? Bạn có thể thử '/index.php? Q = $ uri.md' trong' try_files', nghĩa là khai báo 'index.php', mặc dù tôi nghĩ nó sẽ hoạt động như thế này. – Keelan
Tôi khá chắc chắn 'document_root' là okay vì các url thông thường/dài hoạt động tốt. Tôi cũng đã thử với '/ index.php? Q = $ uri.md' nhưng nó không tạo ra sự khác biệt. – wilks