0

ねえ、

次の状況があります。同じ URL で動作する必要がある 2 つのシステム (Magento と Codeigniter) を実行しています。Magento はいくつかの URL のみを担当します。

http://dev/checkouthttp://dev/kasseたとえば、にあるmagentoによって提供される必要があります/vagrant/magento

他のすべてのリクエストは、次の場所にある codeigniter によって処理される必要があります/vagrant/codeigniter

ある程度は機能しましたが、if を使用しており、フォルダーを 2 つのファイルに追加する必要があり、これは良くありません。そして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;
4

1 に答える 1

1

まず、すべてを開始する前に、conf ファイルのバックアップを取ることをお勧めします。

とにかく、最初はうまくいっていましたが、追加する必要のないものを追加しました。

try_files $uri $uri/ @handler;

この行は実際には 2 つに分割する必要はありません。書き換えをマージするだけでかまいません。

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

これをすべて削除しようとすると、まだ機能しているはずです

于 2013-07-17T23:10:47.787 に答える