0

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

将被重定向到:

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

现在这可以通过 PHP标头轻松完成。

但是我也找到了oxutilsurl类。这门课甚至可以做到这一点吗?它有帮助吗?

4

2 回答 2

2

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

从理论上讲,如果您真的想在 oxid 模块中为此提供一个解决方案(以避免破坏核心,并将其捆绑在模块中),您可以扩展在 oxids 非常自己的 mvc 之前调用的几个 oxid 函数之一到达基于路由逻辑并在该点手动重定向。基本上这可以在您被路由到 404 页面之前在每个被调用的核心函数中完成 (oxseodecoder::processSeoCall)

考虑到来自 oxid 的官方信息,它列出了不可重载的类,您应该能够扩展 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] 

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

我将重写规则与本文中的信息放在一起。

于 2016-06-19T02:45:02.873 回答
1

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

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

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

于 2016-06-18T19:27:59.087 回答