Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
m-strojek opened this issue Mar 7, 2016 · 12 comments

Comments

@m-strojek
Copy link

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.

@okorshenko okorshenko added the PS label Mar 7, 2016
@m-strojek
Copy link
Author

I figured out a modification which fixes the problem of endless redirects / wrong redirects.
Seems that the cookie value wins before the server value - so if you open some host which sets the store code to A but you have B as cookie value you will be redirected to store B.

Solution would be to override the cookie value in pub/index.php
if ( isset($_SERVER['MAGE_RUN_TYPE']) == 'store' && isset($_SERVER['MAGE_RUN_CODE']) ) {
if ( !empty($_SERVER['MAGE_RUN_CODE']) ) {
$_COOKIE['store'] = $_SERVER['MAGE_RUN_CODE'];
}
}
$params = $_SERVER;

@avra911
Copy link

avra911 commented May 12, 2016

Have the same issue on a sub-domain multi stores.
After using site store switcher on front, is entering in loop in back-end page.

When browsing the stores, just by typing in the URL, without using the switcher, there is no problem.

@rickwhitehead
Copy link

Having the same issue on a simple one website 2 stores site configuration.
Can be reproduced only if store switcher is used - this sets a 'store' cookie which is not updated correctly when the switcher is used repeatedly and remains set to the initial switch - haven't tried adding another store but suspect it still won't update as expected. Will try to offer a fix suggestion soon.

@srbarba
Copy link

srbarba commented Jun 10, 2016

Have the same issue, some fix please
[SOLVED] The problem was the $_COOKIE['store]

@GianniPDF
Copy link

Looks like m-strojek fix works! Ty

@piotrekkaminski
Copy link
Contributor

Closing as solution is available above.

@gewaechshaus
Copy link

THX @m-strojek

@ctadlock
Copy link

ctadlock commented Jan 4, 2017

@piotrekkaminski Im confused as to why this issue is closed. While the solution that @m-strojek provided works, shouldn't this be added to the Magento code? Why should all of the store owners need to make this fix themselves?

@ctadlock
Copy link

@piotrekkaminski Again, why is this closed?

@sabei
Copy link

sabei commented Apr 25, 2017

thanks @m-strojek.

@sabei
Copy link

sabei commented Apr 25, 2017

Why is the solution not added to the core code? Is there any other reason?

@maderlock
Copy link

This "fix" would break the standard store switcher that replies on cookies overriding server settings. The standard approach is for the server to set a default store, and then your cookie determines whether a different store is used. So adding this to the core code might solve your situation, but it would break other people's sites, so it's unlikely to be done.

pdohogne-magento pushed a commit that referenced this issue Mar 26, 2019
Fixed issues:
- MAGETWO-71993: CMS Image Upload Response Contains Redundant Info
- MC-5964: Fixed incorrect behaviour of sync actions
- MC-10866: Cart's customer and address mismatch
- MC-5947: Email templates breaking rendering
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests