使用 oxid 函数重定向 SEO URL

Redirecting SEO URL with oxid functions

我正在尝试当有人打开此 link 时:[url]www.example.com/invite/1234randomhashtag[/url]

将被重定向到:

www.example.cloud/index.php?cl=register_new_user&fnc=register&hash=1234randomhashtag

现在可以使用 PHP header.

轻松完成此操作

不过我也找到了 oxutilsurl class。用这个 class 甚至可以做到这一点吗?有帮助吗?

OXID 没有基于 url 部分的动态路由。
对于每个有效的 SEO Url,数据库中都有一个 SEO URL 条目。

您可以在有人使用您的邀请功能时生成 SEO Url,并在几个月后删除 url。
或者您需要稍微更改生成的 urls 并使其看起来像这样: www.example.com/invite#1234randomhashtag 使用 # 而不是 /
然后从 $_SERVER["REQUEST_URI"] 解析你的散列并设置你的变量或重定向到最终的 URL

但是您仍然可以在 OXID 之外使用 .htacess 重写规则(我猜)或另一个 php 微框架解决这个问题,例如 "Slim" 或 "Lumen" 运行 /invite/ 目录并将访问者重定向回商店

Oxid 不会以适合您的方式更改原始的 oxid 路由机制来支持您。有一种方法可以在 oxid 管理后端的常规设置中设置静态重定向(请参阅 SEO 选项卡)。但是那些不支持通配符 (/invite/*) 就像你需要的那样。

从理论上讲,如果您真的想在 oxid 模块中解决这个问题(以避免破解核心并将其捆绑在模块中),您可以扩展被调用的几个 oxid 函数之一在到达 oxids 自己的基于 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=    [NC,L] 

您可以将该代码直接放在商店根目录中 .htaccess 文件中的 RewriteBase / 下。

我将该重写规则与来自 this article 的信息放在一起。