Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
迁移到TYPO3 9+;后继续重定向旧的realurl URL;_Typo3_Typo3 9.x_Realurl_Typo3 10.x - Fatal编程技术网

迁移到TYPO3 9+;后继续重定向旧的realurl URL;

迁移到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

我想使用已过期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

保持重定向的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混合在一起。为了保持整洁,我有两条建议(这两条建议都在我维护的网站中使用过):

  • 在配置管理系统中维护重定向(例如angular、SiteStack)。不要在那里写重定向语句,只需添加URL,让您的状态(或CM调用的任何状态)为您编写它们

  • 使用和一个由URL组成的文件

  • 对于这两种解决方案,您通常有(至少)两种类型的重定向:

    • 精确重定向,例如,您希望将/abc/def重定向到/new/def,但不是例如/abc/def/子页面
    • 正则表达式或通配符重定向,例如,您想将/abc/*重定向到/new/*
    两者都可以通过适当的RewriteRule语句来处理,但它们看起来不同。对于解决方案1和2,您需要分别处理这些问题

    示例1(正则表达式重定向):

    示例2重写地图:

    /etc/apache2/sites available/mysite.conf

    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重新加载
      (出错时中止)或
      apachectl配置测试
      。(或者更好的是,在执行状态之前,您的CM会为您这样做)
    • 关于使用
      RewriteRule
      Redirect
      :您可以同时使用and或其变体(如RedirectMatch),但RewriteRule通常更强大,而另一个可能更快。理想情况下使用其中一种。另见
    我的第二个解决方案(我正在生产中使用-稍作修改)是类型3:

    • 基于404的
      PageErrorHandlerInterface
      创建页面错误处理程序。在realurl表中检查URL。如果你点击了,重定向到新的URL
    • 如果没有命中,请返回到通常的操作,例如显示错误页面
    这有以下优点(对于TYPO3重定向扩展):

    • 它只在404上启动,而不是在每个页面上启动。
    • 此外,您不必将重定向迁移到sys_重定向,您可以按原样使用旧的realurl表
    Repository\PathMappingRepository:

    公共函数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