使用 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 的信息放在一起。
我正在尝试当有人打开此 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 的信息放在一起。