我正在尝试设置Nginx服务器配置,以便从子文件夹提供CakePHP安装。
https://sub.domain.com/cakefolder
/var/www/domain/sub/cakefolder
所以我正在为URL和系统使用子文件夹。现在我花了一些时间来计算以下配置,以及CakePHP正确处理哪些请求。这意味着它正确引导和处理控制器。
但不起作用的是从webroot
目录提供静态文件(例如* .css文件),因为这些文件都被解释为CakePHP控制器,导致CssController could not be found.
错误。
我的site.conf:
server {
listen *:80;
listen *:443 ssl;
server_name sub.domain.com;
ssl_certificate ./ssl/domain.crt;
ssl_certificate_key ./ssl/domain.key;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
root /var/www/domain/sub/cakefolder/;
autoindex off;
index index.php;
location /cakefolder {
root /var/www/domain/sub/cakefolder/app/webroot/;
try_files $uri $uri/ /cakefolder/index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
如何阻止Nginx通过FastCGI PHP解释器路由现有的静态文件?
基于https://stackoverflow.com/a/22550332/671047我已尝试用
替换location /cakefolder { ... }
location ~ /cakefolder/(.*) {
try_files /cakefolder/$1 /cakefolder/$1/ /cakefolder/index.php?$args;
}
但这导致重定向循环导致HTTP 500错误。
解决方案(感谢Pete!):
我发现以下附加指令适用于此特定设置。这可能不是最优雅的解决方案,但是谁在乎,很高兴它现在正在工作。
location ~* /cakefolder/(.*)\.(css|js|ico|gif|png|jpg|jpeg)$ {
root /var/www/domain/sub/cakefolder/app/webroot/;
try_files /$1.$2 =404;
}
答案 0 :(得分:2)
location ~* \.(css|js|ico)$ {
try_files $uri =404;
}
我有一个类似的设置,当我经历同样的事情(只是没有蛋糕)时,它对我有用。我不会说谎,我永远不明白为什么try_files w / redirect总是在现有静态文件上失败,其中抛出像^上面的try_files找到文件np。这个想法? (也许今天是源头阅读日)