Skip to content

Store switch endless loop, wrong navigation block content (wrong store) with multidomain/language setup #3676

Closed
@m-strojek

Description

@m-strojek

Steps to reproduce

  1. Install Magento release 2.0.2)
    1a. Disable Fullpage and block cache (just to avoid caching effects)
  2. Setup multistore setup with nginx:
    This setup is meant to handle country domains with a (not unique between stores) language prefix for urls.

E.g.
http://mysite.de/
http://mysite.de/en-DE/
http://mysite.at/
http://mysite.at/en-AT/
http://mysite.ch/
http://mysite.ch/en-CH/

a)
server {
server_name mysite.de

# handle default requests
location ~ (index|get|static|report|console|404|503)\.php$ {

    # set base store for this domain
    fastcgi_param MAGE_RUN_CODE base_de_de;
    fastcgi_param MAGE_RUN_TYPE store;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

    include        fastcgi_params;
}
# handle language code requests like mysite.de/en-DE/...
location ~ "\/([a-zA-Z]{2})\-([a-zA-Z]{2})(\/?)(.*)$" {

    fastcgi_param MAGE_RUN_CODE base_$1_$2; # will result in e.g. base_en_de
    fastcgi_param MAGE_RUN_TYPE store;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $MAGE_ROOT/pub/index.php;

    include        fastcgi_params;

    # overwrite paths with cleanup of language code
    fastcgi_param  REQUEST_URI $3$4;
}

}

b)

server {
server_name mysite.at

# handle default requests
location ~ (index|get|static|report|console|404|503)\.php$ {

    # set base store for this domain
    fastcgi_param MAGE_RUN_CODE base_de_at;
    fastcgi_param MAGE_RUN_TYPE store;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

    include        fastcgi_params;
}
# handle language code requests like mysite.at/de-AT/...
location ~ "\/([a-zA-Z]{2})\-([a-zA-Z]{2})(\/?)(.*)$" {

    fastcgi_param MAGE_RUN_CODE base_$1_$2; # will result in e.g. base_en_at
    fastcgi_param MAGE_RUN_TYPE store;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $MAGE_ROOT/pub/index.php;

    include        fastcgi_params;

    # overwrite paths with cleanup of language code
    fastcgi_param  REQUEST_URI $3$4;
}

}

c)
server {
server_name mysite.ch

# handle default requests
location ~ (index|get|static|report|console|404|503)\.php$ {

    # set base store for this domain
    fastcgi_param MAGE_RUN_CODE base_de_ch;
    fastcgi_param MAGE_RUN_TYPE store;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

    include        fastcgi_params;
}
# handle language code requests like mysite.at/de-AT/...
location ~ "\/([a-zA-Z]{2})\-([a-zA-Z]{2})(\/?)(.*)$" {

    fastcgi_param MAGE_RUN_CODE base_$1_$2; # will result in e.g. base_en_ch
    fastcgi_param MAGE_RUN_TYPE store;

    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $MAGE_ROOT/pub/index.php;

    include        fastcgi_params;

    # overwrite paths with cleanup of language code
    fastcgi_param  REQUEST_URI $3$4;
}

}

  1. Store Configuration
    Store 1:
    Name: My Store (Renamed the default)
    Root Category: use default
    Default Store View: DE - DE

Website 1 (Default):

Name: My Website (Renamed the default)
Code: base
Default Store: My Store

Store Views 1:

Name: DE - DE (renamed default)
Code: base_de_de
Backend Base Url: http://mysite.de/
Backend Base Link Url: http://mysite.de/

Store Views 2:

Name: EN - DE
Code: base_en_de
Backend Base Url: http://mysite.de/
Backend Base Link Url: http://mysite.de/en-DE/

Store Views 3:

Name: DE - AT
Code: base_de_at
Backend Base Url: http://mysite.at/
Backend Base Link Url: http://mysite.at/

Store Views 4:

Name: EN - AT
Code: base_en_at
Backend Base Url: http://mysite.at/
Backend Base Link Url: http://mysite.de/en-AT/

Store Views 5:

Name: DE - CH
Code: base_de_ch
Backend Base Url: http://mysite.ch/
Backend Base Link Url: http://mysite.ch/

Store Views 6:

Name: EN - CH
Code: base_en_ch
Backend Base Url: http://mysite.ch/
Backend Base Link Url: http://mysite.de/en-CH/

Expected result

  1. Switching between stores will work as expected
  2. Content will be shown as configured for the store

Actual result

  1. Switching between stores works some time - but at some point you can't get back to the default stores views.
    Additional, at some time endless redirect loops occur between 2 of the stores after switching.
    Can only be fixed by closing browser AND clearing session table AND clearing cache via commandline.
  2. If you call the store with mysite.de you will get
    a) OK a correct store switcher preselection
    b) OK a correct content (some configured cms page)
    c) NOT OK Top Navigation links will show links with a
    language/country prefix and url from the other store (e.g. mysite.ch/en-CH/somecategory.html even if you are on mysite.de.
    Reload of the page will sometimes bring the correct results for the store, sometimes navigation from an other store (wrong too).
    I even checked the context in the navigation block by echo of store id: it's correctly showing the expected store.

Hope that someone has an idea what went wrong here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions