Magento 2:サブフォルダーを含む複数のWebサイトを使用するようにNginxを構成する方法


9

Magento 2で複数のWebサイトを作成したいと考えています。公式Magento 2ドキュメントにこのトピックに関する記事がありますが、それらの説明は私たちのケースには適していません。

彼らは、次のような異なるウェブサイトを決定するためにサブドメインを使用することを提案しています

  • website1 .magento-site.com
  • website2 .magento-site.com

サブドメインの代わりにサブフォルダを使用したいと思います。例を挙げると、

  • magento-site.com/ website1
  • magento-site.com/ website2

Nginx Webサーバーでこの問題を解決するにはどうすればよいですか?

私の構成

Ubuntu 16.04を使用しています。Nginxをインストールしましたが、Nginxコアの設定を変更していません。magento-site.com.conf内にファイルを作成しました/etc/nginx/sites-enabled/magento-site.com.conf

/etc/nginx/sites-enabled/magento-site.com.conf

server {
    listen 8080;
    server_name magento-site.com;

    set $MAGE_RUN_CODE website1;
    set $MAGE_ROOT /var/www/magento-site.com;
    include /var/www/magento-site.com/nginx.conf;
}

編集1:(2017-10-23)

各ウェブサイトに複数のショップがあります。


新しいパスの書き換えを追加するだけです
MagenX

nginx.confにはすでに多くの書き換えとtry_fileブロックがあります。あなたが見れば新鮮な Magentoの2のインストールには、コンフィギュレーションの多くのnginx.confが表示されます。
Bunyamin Inan 2017

@MagenXもっと説明してもらえますか?正確にどこに書き直すべきですか?
Bunyamin Inan

回答:


13

私はこのタスクを達成するために多くの方法を試しました。私は最初に彼の答えを理解しませんでしたが、彼の貢献に@ matias-hidalgoに感謝します:)。

これがシナリオです。我々は持っている2つのさまざまなウェブサイトを、それぞれのウェブサイトが持っている2次のように異なる店舗ビューを:

ウェブサイト1

  • ウェブサイト1(eコマース)
  • ウェブサイト1(Venda Assistida)

ウェブサイト2

  • ウェブサイト2(eコマース)
  • ウェブサイト2(Venda Assistida)

私のソリューションでは、Magento Adminの構成をいくつか変更します。次に、いくつかのサブフォルダ作成し、最後に変更しnginx.confます。

まず、Magento Adminで設定を変更する必要があります。ゴーへStores- > Configuration- > General- > Web。各ストアビューのベースURLを変更する必要があります。

デフォルト設定の場合

デフォルトの構成として次の構成を指定してください。 ここに画像の説明を入力してください

Webサイト1(eコマース)およびWebサイト1(Venda Assistida)の場合

Webサイト1のすべてのストアビューに次の構成を指定してください。 ここに画像の説明を入力してください

Webサイト2(eコマース)およびWebサイト2(Venda Assistida)の場合

Webサイト2のすべてのストアビューに次の構成を指定してください。 ここに画像の説明を入力してください

次に、ディレクトリにフォルダを作成する必要がwebsite1ありwebsite2ます/pub。最後に、次のフォルダーが必要です。

  • MAGENTO_ROOT/pub/website1
  • MAGENTO_ROOT/pub/website2

pub/index.phpこれらのディレクトリにファイルをコピーします。次に、MAGENTO_ROOT/pub/website1/index.phpとに変更を加えますMAGENTO_ROOT/pub/website2/index.php

の内容 MAGENTO_ROOT/pub/website1/index.php

変更したのは3行だけです。

1行目: require __DIR__ . '/../../app/bootstrap.php';

2行目: $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website1';

3行目: $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';

<?php
/**
 * Public alias for the application entry point
 *
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

use Magento\Framework\App\Bootstrap;
use Magento\Framework\App\Filesystem\DirectoryList;

try {
    require __DIR__ . '/../../app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

$params = $_SERVER;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website1';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
$bootstrap->run($app);

最後nginx.confに、MAGENTO_ROOTディレクトリを変更する必要があります。次の設定をに追加してくださいnginx.conf

location /website1 {
    root /website1;
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /website1/index.php last;
        break;
    }
}

location /website2 {
    root /website2;
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /website2/index.php last;
        break;
    }
}

このすべての構成と変更が完了すると、Webサイトをサブフォルダーとして使用できるようになります。お役に立てば幸いです。


1
この構成で直面している唯一の問題は、静的コンテンツが機能しないことです
Aman Alam

@AmanAlam説明どおりに静的コンテンツのベースURLを変更しましたか?Magento 2.1では、2つの異なるクライアントでこの構成をテストしました。
Bunyamin Inan

はい述べたように、ベースURLを変更し、その今の作業は、あなたに感謝
アマンアラム

1
@Bunyamin私も同じ方法でした。ホームページは機能していますが、カテゴリと製品ページで404エラーが発生しています。なにか提案を?その中で私を助けてくれませんか。
ジャイミン、

1
@ Jaimin、nginx.confではなくnginx.conf.sampleで上記のコードを使用してください。それはあなたの問題を修正します。
umair ayub 2018年

2

Nginx構成では、この構成例を使用できます。

server {
    listen 80;
    ## SSL directives might go here
    server_name local.magento2.com;
    root /PATH/TO/YOUR/MAGENTO/pub;

    location / {
        index index.html index.php; ## Allow a static html file to be shown first
        try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
        expires 30d; ## Assume all files are cachable
    }

    location /your/subfolder {
        root /your/subfolder;
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /your/subfolder/index.php last;
            break;
        }
        #limit_conn iplimit 50;
    }

    location @handler { ## Magento uses a common front handler
        rewrite / /index.php;
    }

    location /static/ {
        # Uncomment the following line in production mode
        # expires max;

        # Remove signature of the static files that is used to overcome the browser cache
        location ~ ^/static/version {
            rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last;
        }

        location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
            add_header Cache-Control "public";
            add_header X-Frame-Options "SAMEORIGIN";
            expires +1y;

            if (!-f $request_filename) {
                rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
            }
        }
        location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
            add_header Cache-Control "no-store";
            add_header X-Frame-Options "SAMEORIGIN";
            expires    off;

            if (!-f $request_filename) {
               rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
            }
        }
        if (!-f $request_filename) {
            rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last;
        }
        add_header X-Frame-Options "SAMEORIGIN";
    }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
        rewrite ^(.*.php)/ $1 last;
    }

    location ~ .php$ { ## Execute PHP scripts
        if (!-e $request_filename) {
            rewrite / /index.php last;
        }
        expires        off;
        #fastcgi_pass   unix:/run/php/php5.6-fpm.sock;
        fastcgi_pass   unix:/run/php/php7.0-fpm.sock;
        fastcgi_read_timeout 10m;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        #fastcgi_param  MAGE_RUN_CODE $mage_run_code;
        #fastcgi_param  MAGE_RUN_TYPE store;
        #fastcgi_param  MAGE_MODE developer; # default or production or developer
        include        /etc/nginx/fastcgi_params;
    }
}

例として、このindex.phpを使用します。

/PATH/TO/YOUR/MAGENTO/pub/your/subfolder/index.php
<?php
use Magento\Framework\App\Bootstrap;
use Magento\Framework\App\Filesystem\DirectoryList;
try {
    require __DIR__ . '/../../../app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

$params = $_SERVER;
$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [
    DirectoryList::PUB => [DirectoryList::URL_PATH => ''],
    DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],
    DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],
    DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],
];
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website_code';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);

明確にするために:

私のvhost nginx構成では、これが見つかります:

    location /your/subfolder {
        root /your/subfolder;
        if (!-e $request_filename) {
            rewrite ^/(.*)$ /your/subfolder/index.php last;
            break;
        }
        #limit_conn iplimit 50;
    }

ここで、最初の「/ your / subfolder」は、WebサイトのURLとして何でも変更できます。ex www.mywebsite.com/stack/magento-> / stack / magento

次に、このURLにロードされるWebサイトコードを定義するには、ここにWebサイトコードを書き込むindex.phpを作成する必要があります。

$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website_code';

これが十分に明確になったことを願っています。プロジェクトに時間を費やしてこれを完了する必要があるので、それが機能することと、M1でこれまで使用していた方法に近いことがわかります。


これが私の問題をどのように解決するかわかりません。複数のウェブサイトを使用する方法を具体的に尋ねました。このコードはWebサイトにも使用できることを示唆していますか?
Bunyamin Inan 2017

「サブドメインの代わりにサブフォルダを使いたい」とあなたは言った。私の回答を更新して、各サブフォルダの構成がどこにあるかを明確にします
Matias Hidalgo

はい、そう言った。また、サブフォルダを含む複数のウェブサイトを使用したいとも述べました。店舗コードで何が行われているのか理解できません。
Bunyamin Inan 2017

これは単なる提案でした。店舗コードが十分であれば、nginxの設定を処理する必要はありません...私の説明を今すぐ見てください
Matias Hidalgo

だから私の店のコードとウェブサイトのコードが一致すればこれはうまくいくと言っています。また、ウェブサイトごとに複数のショップがあります。
Bunyamin Inan 2017

0

"etc / nginx"のdomain.confで、マップを作成する必要があります。

例えば:

map $http_host$uri $MAGE_RUN_CODE { 
   ~*^(www\.)?magento-site\.com/website1/.*  website1;
   ~*^(www\.)?magento-site\.com/website2/.*  website2;
}

または

map $request_uri $MAGE_RUN_CODE {
    default default;
    ~^/website1/.*  website1;
    ~^/website2/.*  website2;
}

あなたはサブドメインの方法を説明しています。私が欲しいのはサブフォルダーの方法です。欲しくないが欲しwebsite1.magento-site.comがるmagento-site.com/website1
Bunyamin Inan

同じ方法でサブフォルダーをマップし、サブパスに正規表現の書き換えを追加できますmap $http_host$uri $MAGE_RUN_CODE
MagenX

私はちょうど404を与え、この方法を試してみました
themanwhoknowstheman

@MagenX私はあなたが別の投稿でこの方法を提案しているのを見ましたが、これを正しく機能させるための正確な指示については詳しく説明していません。共有しますか?
themanwhoknowtheman 2017年

0

この二重マップを持つ純粋なnginxソリューションはどうですか?

まず、ウェブサイト(@MagenXに感謝)

map $request_uri $MAGE_RUN_CODE {
    default website1;
    ~^/website1/.*  website1;
    ~^/website2/.*  website2;
}

新しいリクエストuriの2番目

map $request_uri $REQUEST_URI {
    default  $request_uri;
    "~*^/(website[0-9])(?<p>.*)" $p;
}

そして最後に、新しく計算されたREQUEST_URIを設定することを忘れないでください

location ~ \.php$ {
(...)
   include fastcgi_params;
   fastcgi_param MAGE_RUN_CODE $MAGE_RUN_CODE;
   fastcgi_param REQUEST_URI $REQUEST_URI;
(...)
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.