Nginx - 重写规则疯狂

时间:2014-03-18 22:21:16

标签: php mod-rewrite nginx rewrite

我正在尝试重定向看起来像这样的链接:

http://example.com/dev/some_project

到他们的实际位置:

http://example.com/dev/some_project/some_project.php

为了达到这个目的,我提出了以下规则集:

location / {
    try_files $uri $uri/ @folderless-php;
    index index.php index.html index.htm;
}


location @folderless-php {
    rewrite ^(.*)$ "${uri}/${basename}.php";
}

然而,由于某种原因,这只会调用内部服务器错误。

所以我尝试将其更改为:

location / {
    set $folderless "${uri}/${basename}.php";
    try_files $uri $uri/ $folderless;
    index index.php index.html index.htm;
}

这似乎与curl一起使用,但是当我在任何浏览器中尝试这个时,我只是被允许下载我试图访问的文件,令我惊讶。

导致这种行为的原因是什么?有没有办法实现我想要做的事情?

1 个答案:

答案 0 :(得分:0)

由于您没有告诉Nginx如何处理PHP文件,因此您正在下载。您需要将fast-cgi参数设置为:

location ~ \.php$ {
    fastcgi_read_timeout 60000;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_index   index.php;
    fastcgi_param   SCRIPT_FILENAME /var/www/site$fastcgi_script_name;
    include         fastcgi_params;
}