我正在使用 Homebrew 运行 Mac OSX 10.10 Yosemite。我使用的是使用 MAMP 的本地主机环境,我想要一个资源占用较少且没有所有臃肿附加功能的东西。我已经通过 Homebrew 安装了 nginx、mysql 和 php56,以及 php-fpm 和 mcrypt。我使用 Laravel 作为我的 php 框架。当我使用 MAMP 时,我会像这样访问 Laravel 项目:
localhost/myproject/public/
localhost/myproject/public/some_route
查看公共文件夹登录页面(上面的第一个 uri)时,一切似乎都正常工作。我的 routes.php 文件中的任何其他子位置(上面的第二个 uri)都返回 500 内部服务器错误。在进行了一些搜索、查看了教程并测试了不同的 nginx 配置后,我目前在 nginx.conf 文件中的内容如下:
worker_processes 4;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /Users/adam2k/www;
index index.html index.htm index.php;
rewrite_log on;
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location / {
try_files $uri $uri/ /index.html;
}
location ~ .php$ {
try_files $uri = 404;
include /usr/local/etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
# break;
}
}
}
我的 /etc/hosts 文件如下所示:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
在错误日志下我收到此消息:
2015/02/10 12:51:32 [error] 22306#0: *19 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: ::1, server: , request: "GET /favicon.ico HTTP/1.1", host: "localhost"
这让我相信问题在于
location / {...}
配置文件中的区域,但我不确定如何解决这个问题。
我并不想对虚拟主机做任何花哨的事情,也不想在我的主机文件中添加特殊的.dev 或 .local uri,但如果这是唯一的答案,那么我愿意投入额外的配置工作。
答案1
这太复杂了,而且其中的各个部分似乎相互冲突。
try_files $uri $uri/ @rewrite;
location @rewrite {
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location / {
try_files $uri $uri/ /index.html;
}
将其简化为单个指令。
try_files $uri $uri/ /index.php?_url=$request_uri;