2016-10-18 2 views
0

Я хочу, чтобы иметь возможность конвертировать следующую ссылку:Перенаправление контроллер/действие

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; 
    } 
} 

Но это дает мне пустую страницу и не получает параметры. Как мне это сделать?

ответ

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; 
} 
Смежные вопросы