Oxid 不会通过更改原始的 oxid 路由机制以使其适合您的方式来支持您。有一种方法可以在 oxid 管理后端的常规设置中设置静态重定向(请参阅 SEO 选项卡)。但是那些不支持通配符 (/invite/*),就像您需要它们一样。
从理论上讲,如果您真的想在 oxid 模块中为这个解决方案提供解决方案(以避免破坏核心,并将其捆绑在模块中),您可以扩展在 oxids 之前调用的几个 oxid 函数之一达到了非常自己的基于 mvc 的路由逻辑并在那时手动重定向。基本上这可以在被路由到 404 页面之前调用的每个核心函数中完成 (oxseodecoder::processSeoCall)
考虑到来自 oxid 的官方信息,其中列出了 non overloadable classes,您应该能够扩展 oxshopcontrol::start(甚至是 oxseodecoder::processSeoCall)并添加如下内容:
if(preg_match("/\/invite\/.*/", $_SERVER['REQUEST_URI'])){
$randomHash = basename($_SERVER['REQUEST_URI']);
oxRegistry::getUtils()->redirect($this->getConfig()->getShopURL().'index.php?cl=register_new_user&fnc=register&hash='.$randomHash , false, 301);
}
无论如何,我认为最简单、最快和最高效的方法是在您的商店根目录中的 .htaccess 文件中设置 url 重定向。
以下应该有效:
RewriteRule ^invite/([A-Za-z0-9-]+)/?$ index.php?cl=register_new_user&fnc=$1 [NC,L]
您可以将该代码直接放在商店根目录中的 .htaccess 文件中的 RewriteBase / 下。
我将重写规则与来自this article 的信息放在一起。