Magento后端404,适用于除两个“网站”配置范围以外的所有范围


14

在我们的Multisitesite / Multistore(view)Magento 1.9.2.2配置中,必须删除其中一个网站,包括store和storeview。

尽管删除本身进行得很好(我之前已经做过),但如果您将“当前配置范围”更改为除两个网站以外的任何网站,我都会得到一个404的后端。

选择一个新的配置范围会导致请求以下URL(更改了管理路径+密钥):

/index.php/mymageadmin/system_config/edit/section/dev/website/<WEBSITE>/key/1221231/

其中<WEBSITE>等于表中的code字段core_website

使用mysql查询登录后,我看到可以成功加载的两个网站在选择网站/商店视图方面具有以下查询:

SELECT `main_table`.* FROM `core_config_data` AS `main_table` WHERE (`scope` = 'websites') AND (`scope_id` = '4') AND (`path` LIKE 'dev/%')
SELECT `core_website`.* FROM `core_website` WHERE (`core_website`.`code`='working_store_code')

其他提供404的网站以相同的第一个查询开始-但是当然有不同的scope_id,但是在第二个查询中,Magento认为它必须寻找一个范围storeview而不是website!它实际上似乎尝试了两次。

SELECT `main_table`.* FROM `core_config_data` AS `main_table` WHERE (`scope` = 'websites') AND (`scope_id` = '3') AND (`path` LIKE 'dev/%')
SELECT `core_store`.* FROM `core_store` WHERE (`core_store`.`store_id`=3) ORDER BY `sort_order` ASC
SELECT `core_store`.* FROM `core_store` WHERE (`core_store`.`store_id`=3) ORDER BY `sort_order` ASC

我的core_website表如下所示:

website_id code           sort_order     default_group_id  is_default
0          admin          0              0                 0
1          working_one    1              1                 1
3          failing_one    2              4                 0
4          working_two    3              9                 0
6          failing_two    4              16                0
7          failing_three  5              15                0
8          failing_four   6              17                0
9          failing_six    7              18                0

working_xxx =这些加载正常,failing_xxx =这些给出404 /尝试选择一个不存在的store_id。

我的core_store表如下所示:(删除的代码+名称不相关)

store_id website_id group_id sort_order is_active
0        0          0        0          1
1        1          1        0          1
4        3          4        1          1
5        3          4        2          1
10       4          9        0          1
19       7          15       0          1
20       4          9        1          1
21       4          9        2          1
22       4          9        4          0
23       6          16       1          1
24       6          16       2          1
26       4          9        4          1
28       7          15       0          1
29       1          1        2          1
30       8          17       0          1
31       9          18       0          1
32       9          18       0          1
33       8          17       2          1
34       8          17       3          1
35       8          17       4          1
36       4          9        10         1

这是core_store_group:

group_id website_id name            root_cat_id default_store_id
1        1          working_one     50          1
4        3          failing_one     44          4
9        4          working_one     77          10
15       7          failing_two     70          19
16       6          failing_three   46          23
17       8          failing_four    50          30
18       9          failing_five    96          31

在删除网站/商店视图之前,我已经将这三个表与数据库的备份副本进行了比较,并且-除了删除了上述网站/商店视图之外-一切看起来都完全相同。相同的ID,相同的代码等。

据我所知,这三个表是Magento唯一检查的storeview /网站代码和ID的表。

对于故障排除,我已经执行了以下操作:为了确保没有保留具有旧配置的缓存,如:清空var / cache,清空缓存,重新索引,重新启动服务器等,所有这些都无济于事。

即使所有php / magento都已登录,开发人员模式等,我仍无法了解为什么发生这种情况的零线索。没有异常被记录。

所以这两个问题是:为什么Magento试图选择一个不存在的storeview范围而不是网站范围,以及如何解决这个问题?

更新1 /解决方法

经过一整天的故障排除,包括但不限于magento-db-repair工具,使用所有原始网站和商店视图重新创建core_store,core_store_group和core_website表,我终于注意到了以下几点:

对于所有website_id正常的负载,都有一个store_id具有相同编号的。website_id 1并且4正在按预期加载,并且确实存在(不相关)store_id 1和已4定义。

对于website_id 36789没有store_id以相同的号码。

但是,一旦我在中创建了一个伪造的条目store_id,例如3,就加载的配置范围website_id 3重新开始工作。

因此,尽管我现在已经成功地采取了一种解决方法,但最终还是获得了一个额外的(已禁用)网站和5个(已禁用)商店视图。

为确保以前没有问题,我转到了保存在开发服务器(magento 1.9.1.0版)上的较旧版本的站点之一。

在这里,一切工作正常,即website_id 6无需store_id 6core_store表中加载就可以加载。


我不得不问,更改所有内容后,您是否运行过网址索引编制?
Anthony Cicchelli '16

嘿@AnthonyCicchelli,感谢您的提问。这实际上是我尝试解决此问题的第一件事,但无济于事:(
Ottonet

这里有很多因素,您很难从数据库中清除所有URL并重新运行URL,因为这里有很多因素。音效与我息息相关。请非常小心,像上面那样直接使用数据库。确保您有备份,否则可能会破坏所有内容。
Anthony Cicchelli

我很确定这不是magento代码深处的“前端”问题(例如URL索引),而是“后端”问题。在我看来,Magento希望使用website_id / store_id的特定顺序/组合,如果您删除“中间”的ID,magento将无法匹配并加载这些website_id。
Ottonet

Answers:


2

我在单个网站商店上遇到了类似的问题,并通过以下查询解决了。

SET SQL_SAFE_UPDATES=0;
SET FOREIGN_KEY_CHECKS=0;
UPDATE `core_store` SET store_id = 0 WHERE code='admin';
UPDATE `core_store_group` SET group_id = 0 WHERE name='Default';
UPDATE `core_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;
SET SQL_SAFE_UPDATES=1;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.