重定向到控制器/操作

时间:2016-10-18 10:34:13

标签: php nginx

我希望能够转换以下链接:

http://domain.com/foo/bar

进入http://domain.com/index.php?controller=foo&action=bar

使用php5-fpm。我还希望能够访问www/文件夹中的静态文件。我怎么做?这就是我到目前为止所做的:

server {
    charset utf-8;
    client_max_body_size 8M;

    listen 80; ## listen for ipv4

    server_name domain.com;

    root        /var/www/domain.com/www;
    index       index.php;

    access_log  /var/log/nginx/domain.com.access.log;
    error_log   /var/log/nginx/domain.com.error.log;

    location / {
        rewrite ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ /index.php?controller=$1&action=$2;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

    location ~ /\.(ht|svn|git) {
        deny all;
    }
}

但它给了我空白页面,没有获取参数。我该怎么做?

1 个答案:

答案 0 :(得分:0)

try_files指令在提供静态文件(如果存在)时很有用,如果不存在则重写URI。有关详细信息,请参阅this document

有很多方法可以实现这一目标,例如:

location / {
    try_files $uri $uri/ @rewrite;
}
location @rewrite {
    rewrite ^([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ /index.php?controller=$1&action=$2 last;
    return 404;
}
location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME $request_filename;
}