我希望能够转换以下链接:
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 :(得分: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;
}