迁移到TYPO3 9+;后继续重定向旧的realurl URL;
我想使用已过期url的realurl内存为升级到TYPO3 9+的站点生成301,并避免404 例如,在键入3 9之前,获取迁移到TYPO3 9+;后继续重定向旧的realurl URL;,typo3,typo3-9.x,realurl,typo3-10.x,Typo3,Typo3 9.x,Realurl,Typo3 10.x,我想使用已过期url的realurl内存为升级到TYPO3 9+的站点生成301,并避免404 例如,在键入3 9之前,获取/my old page重定向到/my new page,因为/my old page仍在realurl数据库表中。 现在,由于迁移到TYPO3 9,获取/my old page会抛出404 TYPO3 9提供了一个升级向导,可将realurl页面路径/别名转换为slug,但不会将realurl过期的页面路径/别名转换为sys\u redirect 保持重定向的realur
/my old page
重定向到/my new page
,因为/my old page
仍在realurl数据库表中。
现在,由于迁移到TYPO3 9,获取/my old page
会抛出404
TYPO3 9提供了一个升级向导,可将realurl页面路径/别名转换为slug,但不会将realurl过期的页面路径/别名转换为sys\u redirect
保持重定向的realurl内存的最佳策略是什么:
- 是否将所有过期的url/别名迁移到sys\u重定向?这会导致一个大的sys_重定向表,并带来性能问题
- 在RedirectHandler之后运行一个中间件,搜索过期的url并触发301(如果找到)?这将对每个请求进行额外的db查询
- 创建一个PageNotFoundHandler,如果找不到页面,它将搜索过期的url?TYPO3只允许每个状态代码有一个ErrorHandler,因此它可能是一个问题
- 在.htaccess中列出重定向
- 性能可能很重要(我有超过10000个过期URL)
- 如果可能,重定向应该可以由编辑器维护(如sys\u redirect)
谢谢你的见解 对于以下内容,我假设您使用ApacheWebServer,并且可以访问/etc/apache2下的Webserver配置
我没有任何数字,但我假设您在Web服务器中处理的重定向比启动PHP和TYPO3更有效。缺点是重定向也会针对静态资产进行评估(除非在其他地方处理,例如cdn)。此外,编辑人员无法维护此功能。但是,例如,如果您是从realurl迁移,您可以通过Apache将此解决方案用作临时解决方案,并在一段时间后将其取下 然而,如果你有很多重定向的话,这会变得不可维护并且相当丑陋 这些年来,我所看到的站点经常积累重定向,通常很高兴地将RewriteRule、Redirect(或Redirect)、RedirectMatch和RewriteCond混合在一起。为了保持整洁,我有两条建议(这两条建议都在我维护的网站中使用过):
- 精确重定向,例如,您希望将/abc/def重定向到/new/def,但不是例如/abc/def/子页面
- 正则表达式或通配符重定向,例如,您想将/abc/*重定向到/new/*
RewriteEngine on
RewriteMap exactredirects "txt:/etc/apache2/redirects/exactredirects.txt"
RewriteRule "^(.*)$" "${exactredirects:$1|/404}" [R=307,L]
/etc/apache2/redirects/exactredirects.txt:
/abc.txt /def.txt
建议:
- 将Apache配置和重定向文件置于版本控制中
- 小心301(永久)。永久重定向意味着永久重定向。由于这是在客户机中处理的,因此您无法撤消此操作。如果您确定,请仅使用301
- 您经常看到使用.htaccess的建议。您可以使用它,而不是将其放在Apache配置中。但是,如果您完全控制Apache配置,则不需要.htaccess,文档建议您完全不要使用.htaccess,除非您需要它。有一个很大的缺点(除了性能方面的考虑):如果您在.htaccess中出错,您可以关闭服务器。如果在Apache配置中进行了更改,则可以执行
(出错时中止)或服务apache2重新加载
。(或者更好的是,在执行状态之前,您的CM会为您这样做)apachectl配置测试
- 关于使用
与RewriteRule
:您可以同时使用and或其变体(如RedirectMatch),但RewriteRule通常更强大,而另一个可能更快。理想情况下使用其中一种。另见Redirect
- 基于404的
创建页面错误处理程序。在realurl表中检查URL。如果你点击了,重定向到新的URLPageErrorHandlerInterface
- 如果没有命中,请返回到通常的操作,例如显示错误页面
- 它只在404上启动,而不是在每个页面上启动。
- 此外,您不必将重定向迁移到sys_重定向,您可以按原样使用旧的realurl表
公共函数findPageidForPathFromRealurl(字符串$path,int$languageId):int
{
$path=ltrim($path,“/”);
$queryBuilder=GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_realurl_pathdata');
$uid=$queryBuilder->select('tx\u realurl\u pathdata.page\u id')
->from('tx\u realurl\u pathdata')
->加入(
“tx\u realurl\u pathdata”,
“页面”,
"p",,
$queryBuilder->expr()->eq('tx\u realurl\u pathdata.page\u id',$queryBuilder->quoteIdentifier('p.uid'))
)
->在哪里(
$queryBuilder->expr()->类似('tx\u realurl\u pathdata.pagepath',$queryBuilder->createNamedParameter
/abc.txt /def.txt