2

我在这里面临一个奇怪的问题。

对于产品,如果我从管理端禁用它,并在浏览器中运行产品 URL,它会显示 500 内部服务器错误。

例如:http ://domain.com/product.html

现在,如果我向 URL 添加一个随机参数并再次运行它,它会按预期给我一个 404 错误页面。

例如:http ://domain.com/product1.html

每当我从 Live 站点禁用我的产品而我的登台站点运行良好时,即使我禁用任何产品,也会发生这种情况。

如果我的产品被管理员禁用,服务器错误可能是什么问题?

我检查了.htaccess,它没有问题。

提前致谢。

4

2 回答 2

2

尝试禁用编译并查看错误是否仍然存在。这是一个错误,在这里描述:http: //www.magentocommerce.com/boards/viewthread/310970/

建议的解决方案是:在 lib/Varien/Autoload.php :: registerScope 中,只需将 include 更改为 include_once :

 static public function registerScope($code)
  {
    self::$_scope = $code;
    if (defined('COMPILER_INCLUDE_PATH')) {
      // Change to include_once to prevent including multiple times !!!
      //@include COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR .    self::SCOPE_FILE_PREFIX.$code.'.php';
      @include_once COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . self::SCOPE_FILE_PREFIX.$code.'.php';
    }
} 
于 2013-11-12T13:03:58.253 回答
0

编译问题很可能是由某些事件侦听器引起的,这些事件侦听器调用已包含在特定区域的编译文件中的类(例如_default.php_checkout.php等)。

由于Varien_Autoload该类使用闭嘴@运算符 for include,它会静默失败(不记录错误消息),因为已经定义的类 viaVarien_Autoload正在任何此类特定于区域的编译文件中重新定义(反之亦然)。

这个问题的正确解决方案是通过修改(或重载)最初位于app/code/core/Mage/Compiler/etc/compilation.xml.

要识别这样的组,您可以暂时删除 中的@before includeVarien_Autoload并在开发人员模式下运行 Magento(请参阅 中的注释index.php):这样,在每次页面加载时,冲突的类将被失败报告为错误include。将报告的类及其分层父级移动到文件的<default>部分complilation.xml,确保任何部分中没有重复,重新编译和测试直到没有报告错误,然后放回@原位,以恢复原始 Magento 核心类文件。

另一种方法是列出安装的第 3 方模块实现的事件处理程序(特别是“早期”_predispatch事件系列),并将这些事件处理程序(及其分层父级)中使用的类移动到文件中的<default>部分compilation.xml

@Socrates提出的解决方案可能有效,但它有几个缺点:

  • 必须修改核心类文件(这可能会影响补丁、升级等);
  • include_once与 simple 相比,效率更低,内存消耗更大include
  • Magento 编译机制提供的优化可能会降级。
于 2015-07-10T14:45:53.957 回答