使kohana和nginx使用url作为包含.php的参数

时间:2014-01-23 13:28:07

标签: php nginx rewrite kohana

我将从示例开始,我想它更容易理解。

我在kohana有一条路线,就像mydomain.dev/param

一样

现在这个参数是一个网址,一个讨厌的,脏的长网,就像你正在观看的那个。

我的问题是,如果网址包含.php,比如“something.php.net”,nginx会告诉我该文件不存在。

这是我的配置:

  location / {
    expires off;
    try_files  $uri  $uri/  @kohana;
    index index.html index.htm index.php;
  }

  location ~/\. {
    deny all;
  }

  location @kohana {
    rewrite ^/(.+)$ /index.php$request_uri last;
  }

  location ~* \.php {
    fastcgi_index index.php;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param KOHANA_ENV development;

    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
  }

此配置适用于所有静态文件等,但当我得到类似mydomain.dev/ http://en.php.net之类的内容时会杀死皇帝。 Nginx告诉我:找不到文件。

这可以解决吗?

错误日志:在stderr中发送FastCGI:“主脚本未知”,同时从上游读取响应头,客户端:10.0.0.1,服务器:laters.dev,请求:“GET /ro1.php.net/property_exists

1 个答案:

答案 0 :(得分:1)

在正则表达式中有一种称为贪婪的东西。你的正则表达式的开头:

(.+\.php)

在匹配“.php”部分之前尝试匹配尽可能多的字符。尝试将其修改为:

(.+?\.php)