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 v9 URL添加尾随斜杠?_Typo3_Typo3 9.x - Fatal编程技术网

如何向TYPO3 v9 URL添加尾随斜杠?

如何向TYPO3 v9 URL添加尾随斜杠?,typo3,typo3-9.x,Typo3,Typo3 9.x,当从TYPO3 8.7更新到TYPO3 9.5时,您可能会放弃realurl扩展以支持新的路由功能 但您可能会注意到,默认情况下,realurl将/附加到所有URL(当您不使用html后缀时) TYPO3路由功能在默认情况下不会这样做,而且当前核心中没有启用此功能的选项。 为什么这是一个问题? 在TYPO3 8.7中,您得到了一个类似www.domain.tld/subpage/的URL。在TYPO3 9.5中,可以使用url www.domain.tld/subpage调用同一页面。 因此,即

当从TYPO3 8.7更新到TYPO3 9.5时,您可能会放弃realurl扩展以支持新的路由功能

但您可能会注意到,默认情况下,realurl将/附加到所有URL(当您不使用html后缀时) TYPO3路由功能在默认情况下不会这样做,而且当前核心中没有启用此功能的选项。 为什么这是一个问题? 在TYPO3 8.7中,您得到了一个类似www.domain.tld/subpage/的URL。在TYPO3 9.5中,可以使用url www.domain.tld/subpage调用同一页面。 因此,即使这是同一个页面,对于搜索爬虫来说,这也是另一个URL。TYPO3在使用appending/调用URL时执行307重定向,但您可能希望使用旧的URL结构


如何配置TYPO3以添加尾随“/?”

要始终添加附加/,您可以自己创建一个路由增强器装饰器,并将其放入站点包中

在网站包的
Classes/Routing/Enhancer/forceAppendingslashdecotor.php
下创建一个文件,内容如下:

<?php
declare(strict_types=1);
namespace MyVendor\SitePackage\Routing\Enhancer;

use TYPO3\CMS\Core\Routing\Enhancer\AbstractEnhancer;
use TYPO3\CMS\Core\Routing\Enhancer\DecoratingEnhancerInterface;
use TYPO3\CMS\Core\Routing\RouteCollection;

class ForceAppendingSlashDecorator extends AbstractEnhancer implements DecoratingEnhancerInterface
{
    /**
     * {@inheritdoc}
     */
    public function getRoutePathRedecorationPattern(): string
    {
        return '\/$';
    }

    /**
     * {@inheritdoc}
     */
    public function decorateForMatching(RouteCollection $collection, string $routePath): void
    {
        foreach ($collection->all() as $route) {
            $route->setOption('_decoratedRoutePath', '/' . trim($routePath, '/'));
        }
    }

    /**
     * {@inheritdoc}
     */
    public function decorateForGeneration(RouteCollection $collection, array $parameters): void
    {
        foreach ($collection->all() as $routeName => $existingRoute) {
            $existingRoutePath = rtrim($existingRoute->getPath(), '/');
            $existingRoute->setPath($existingRoutePath . '/');
        }
    }
}
最后一步,将以下代码放入站点配置yaml文件:

routeEnhancers:
  PageTypeSuffix:
    type: ForceAppendingSlash
routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: '/'
    index: ''
    map:
      '/': 0

在这一调整之后,TYPO3将始终在url中添加一个附加/以使新url与realurl创建的旧url匹配。

除了Tim Schreiner的回答之外,我在.htaccess文件中设置了一个条件,该条件将不带斜杠的url重定向到带尾随斜杠的url。 文件不应受到此条件的影响。 我向.htaccess文件添加了以下条件:

# EXTRA: Enforce trailing slash. Ignore trailing slash on file endings 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpg|png|jpeg|css|js|xml|rss|txt)$ [NC]
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|jpeg|css|js|xml|rss|txt)$ [NC]
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

Tim,你确定GetRoutePathRecorrationPattern()吗

对我来说,它在生产中的两个完全不同的TYPO3(v9.5.3)实例中工作,但这两个项目在ddev容器中都不工作。在那里,候选人总是错过最后一个角色

将模式从“除斜线以外的所有”更改为“完全是斜线”可以使其正常工作

public function getRoutePathRedecorationPattern(): string
{
    return '\/$';
}
您可以在站点配置(config.yaml文件)中使用:


我建议把这个问题移到不太突出的位置。试着把这变成一个更加自信的回答。也许就你自己的答案写一条评论(你可以,你知道)与蒂姆讨论。我可以批准。我最近从9.5.1更新到9.5.4,我的网站崩溃了。I 9.5.1,我显示的解决方案对我有效。I 9.5.4,它破坏了现场。把它改成你的解决方案对我也很有效。这是一个301重定向,比302重定向好。但是还不如一开始就能够生成带有尾随/的链接。不必要的重定向是邪恶的。Imho这确实需要在TYPO3本身中进行配置。此外,如果您进行了重定向,请确保您的非默认语言站点配置与您的尾部斜杠选择相对应!否则,您可能会在无止境的重定向循环中运行。此外,此解决方案仅适用于ApacheWebServer。如果您有nginx或其他交付站点的工具,您将需要另一个解决方案。因此,我完全同意这应该是在核心中配置的,而不是为了防止像这样的变通方法。这应该是一个核心的东西,并且可以在后端轻松配置。感谢分享。既然TYPO3 core支持这一点,请参阅另一个答案,了解更简单、更现代的方法,这可以通过配置完成。这不需要单独的类。谢谢,我已经测试过了,它似乎与TYPO3 9.5.5一起工作,因此是一个更好的解决方案。在早期的版本中,当使用pageType增强器时,您在主页上使用了双/。另请参阅我的编辑,以避免以/index/for you rootpage结尾。是否有人在配置了页面浏览器的情况下使用此解决方案?是的,f.e.使用新闻模块,如on Perfect,搜索一段时间…使用TYPO3 10.4.6也
index:'
在技术上不需要在此处使用
routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: '/'
    index: ''
    map:
      '/': 0