Nginx:从不同的根位置提供文件

时间:2013-07-17 16:20:07

标签: codeigniter magento nginx php

HeJ小鼠,

我有以下情况:我有两个运行的系统(Magento和Codeigniter)应该在同一个URL下运行。 Magento只负责几个网址:

http://dev/checkouthttp://dev/kasse例如应该由位于/vagrant/magento的magento提供

所有其他请求应由位于/vagrant/codeigniter

的codeigniter提供

我有点工作,但它使用if和我必须在两个文件中添加文件夹,这是不好的。而php有时认为它的根位于错误的文件夹(/vagrant/,没有magento文件夹)

我做错了什么,怎么做对了?

谢谢!

# ./sites-available/default

server {
        listen 80;
        listen [::]:80 default_server ipv6only=on;

        server_name rh.dev;

        root /vagrant/codeigniter/;

        location ~ /(kasse|tools|checkout|warenkorb|skin|media) {
                alias /vagrant/magento/;
                index index.php;

                try_files $uri $uri/ @handler;
        }

        location / {
                index index.php;

                if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)$") {
                        access_log off;
                        expires max;
                }

                try_files $uri $uri/ @handler;
        }

        location @handler {
                rewrite / /index.php;
        }

        location ~.php/ {
                rewrite ^(.*.php)/ $1 last;
        }

        include /etc/nginx/php.conf;
}

# ./php.conf

fastcgi_intercept_errors on;

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;

    set $php_root /vagrant/codeigniter/;

    if ( $request_uri ~ /(kasse|tools|checkout|warenkorb|skin|media) ) {
        set $php_root /vagrant/magento/;
    }

    include fastcgi_params;

    fastcgi_index index.php;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

# ./fastcgi_params

fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   CONTENT_LENGTH      $content_length;

#fastcgi_param  SCRIPT_FILENAME     $request_filename;
fastcgi_param   SCRIPT_FILENAME         $php_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME     $fastcgi_script_name;
fastcgi_param   REQUEST_URI     $request_uri;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;

fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR     $remote_addr;
fastcgi_param   REMOTE_PORT     $remote_port;
fastcgi_param   SERVER_ADDR     $server_addr;
fastcgi_param   SERVER_PORT     $server_port;
fastcgi_param   SERVER_NAME     $server_name;

fastcgi_param   HTTPS           $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS     200;

1 个答案:

答案 0 :(得分:1)

首先,我建议您在开始之前备份您的conf文件。

无论如何,你最初做的很棒,但后来你添加了不需要添加的东西,例如

try_files $uri $uri/ @handler;

这行不需要分成两行,你可以将重写合并到其中

try_files $uri $uri/ /index.php;

然后它让我想知道它如何在没有$request_uri的情况下工作,所以如果不起作用我会尝试使用这一行:

try_files $uri $uri/ /index.php$request_uri;

<小时/> 现在这个块我真的不明白它应该做什么

location ~.php/ {
    rewrite ^(.*.php)/ $1 last;
}

我会说完全删除它是安全的,因为它似乎正在重写请求同样的事情。

<小时/> 在php conf中,如果不需要整个事情,可以从文件的路径和位置块理解

set $php_root /vagrant/codeigniter/;

if ( $request_uri ~ /(kasse|tools|checkout|warenkorb|skin|media) ) {
    set $php_root /vagrant/magento/;
}

我会说尝试删除所有这些并且它应该仍在工作