3

目前,我在 ISH 中遇到了一些自定义 URL 重写规则的问题7.9

对于我们的某些环境,它运行良好(如本地和测试),但在 ACC 和 PROD 上,它似乎只在系统多次部署/重新启动后不时运行。

我们创建了一个自定义墨盒,其中包含一个文件deploy.gradle以从原始墨盒urlrewriterules.xml中排除文件。它们被文件夹中的自定义文件替换。应用的静态规则总是可以正常工作。但是,来自自定义 Java 类的规则有时无法通过返回以下错误来很好地加载:domainsplittings.xmlsyndication-targets.propertiesshare/system/config/clusterurlrewriterules.xmlRewriteRuleFactoryImpl

[2018-11-07 08:20:37.906 +0100] WARN localhost ES1 appserver0 [ShipSupport-ebusiness-Site] [-] com.intershop.component.urlrewrite.internal.factory.RewriteRuleFactoryImpl [] [Storefront] [wJ5DCcg2CM5DCZPUUqdNu2D2fj8NZHaXjvP9qIZb] [yFAAAFvikjkOsqjA-0-00] "yFAAAFvikjkOsqjA-0-00" An implementation of rewrite rule type 'CustomCategory' does not exist.

urlrewriterules.xml中将调用此 java 类的部分代码如下:

<!-- Custom Category Rule /c/<NAME_OF_LOWEST_CATEGORY> -->
<rule type="CustomCategory" priority="1000" name="custom category rule">
    <configurations>
       <configuration id="pathPrefix">/catalog</configuration>
        <configuration id="partsCatalogID">4393</configuration>
   </configurations>
</rule>

我们也有在我们自己的墨盒中很好地创建的类,例如CustomCategoryRewriteRuleextends BaseRewriteRule。为这些频道启用了 URL 重写,我们始终使启用它的频道中的缓存无效。

CustomCategory 的扩展名(在同一墨盒中定义)定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<extensionpoint:ExtensionPointModel xmlns:extensionpoint="http://www.intershop.de/extensionpoint/2011" name="CustomCategoryRewriteRule"> 
  <extensionBindings type="java" extensionPoint="com.intershop.component.urlrewrite.capi.RewriteRule-RewriteRule.create" extension="com.package.CustomCategoryRewriteRule" priority="1"/>
</extensionpoint:ExtensionPointModel>

app-extension.component 也被定义在同一个墨盒中,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://www.intershop.de/component/2010" scope="global">
    <fulfill requirement="selectedCartridge" value="cartridge_name" of="intershop.SLDSystem.Cartridges"/>
    <fulfill requirement="selectedCartridge" value="cartridge_name" of="intershop.EnterpriseBackoffice.Cartridges"/>
</components>

我们按照这篇文章来确认如何做到这一点:https: //support.intershop.com/kb/index.php/Display/B28069我们在另一个项目中也可以正常工作,但使用的是 Intershop 7.8

您对可能的原因有任何想法吗?

谢谢!

4

2 回答 2

3

我们最终也通过应用 SMBResponsive 墨盒解决了这个问题。

<?xml version="1.0" encoding="UTF-8"?>
<components xmlns="http://www.intershop.de/component/2010" scope="global">
    <fulfill requirement="selectedCartridge" value="royalihc_sldsystem" of="intershop.SLDSystem.Cartridges"/>
    <fulfill requirement="selectedCartridge" value="royalihc_sldsystem" of="intershop.EnterpriseBackoffice.Cartridges"/>
    <fulfill requirement="selectedCartridge" value="royalihc_sldsystem" of="intershop.SMBResponsive.Cartridges" />
</components>

感谢安德烈亚斯的所有帮助。

于 2018-11-07T14:07:47.803 回答
2

除了实现之外,您还需要在<cartridge>/staticfiles/cartridge/extensions. 这是查找机制的重写规则的实际注册。请参见以下示例:

<?xml version="1.0" encoding="UTF-8"?>
<extensionpoint:ExtensionPointModel xmlns:extensionpoint="http://www.intershop.de/extensionpoint/2011" name="CustomRewriteRule.extension">
    <extensionBindings type="java" extensionPoint="com.intershop.component.urlrewrite.capi.RewriteRule-RewriteRule.create" extension="com.package.CustomCategoryRewriteRule " priority="1"/>
</extensionpoint:ExtensionPointModel>

此外,包含这些扩展的插件需要通过<cartridge>/staticfiles/cartridge/components. 这是必需的,以便在正确的应用程序上下文中正确加载扩展。看这个例子:

<?xml version="1.0" encoding="UTF-8" ?>
<components xmlns="http://www.intershop.de/component/2010">
    <fulfill requirement="selectedCartridge" value="your_custom_cartridge" of="intershop.SLDSystem.Cartridges" /> 
    <fulfill requirement="selectedCartridge" value="your_custom_cartridge" of="intershop.B2CBackoffice.Cartridges" />
    <fulfill requirement="selectedCartridge" value="your_custom_cartridge" of="intershop.B2CResponsive.Cartridges" />
</components>

我不太确定您是否需要为所有这些应用程序注册它,但这些是我们在上一个项目中使用的。如果您使用不同的应用程序类型或有自定义的应用程序类型,请确保相应地添加它们。

于 2018-11-07T09:26:47.423 回答