Как добавить косую черту в URL TYPO3 v9? - PullRequest
0 голосов
/ 04 ноября 2018

При обновлении с TYPO3 8.7 до TYPO3 9.5 вы можете отказаться от расширения realurl в пользу новой функции маршрутизации.

Но вы можете заметить, что realurl добавлял / ко всем URL по умолчанию (если вы не используете суффикс html) Функция маршрутизации TYPO3 не делает этого по умолчанию, и в настоящее время в ядре нет опции, позволяющей это сделать. Почему это проблема? В TYPO3 8.7 вы получили URL-адрес, например www.domain.tld / subpage /. В TYPO3 9.5 эта же страница вызывается с помощью URL www.domain.tld / subpage. Поэтому, даже если это одна и та же страница, для поисковых роботов это еще один URL. TYPO3 выполняет перенаправление 307 при вызове URL с добавлением /, но вы можете использовать старую структуру URL.

Как я могу настроить TYPO3 для добавления трейлинга "/"?

Ответы [ 4 ]

0 голосов
/ 30 января 2019

Вы можете использовать PageTypeEnhancer для отображения и ввода параметра в конфигурации вашего сайта (файл config.yaml):

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    default: '/'
    index: ''
    map:
      '/': 0
0 голосов
/ 06 декабря 2018

В дополнение к ответу Тима Шрайнера, я сделал условие в файле .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]
0 голосов
/ 11 января 2019

Тим, ты уверен насчет getRoutePathRedecorationPattern ()?

Для меня это работало в двух совершенно разных экземплярах TYPO3 (v9.5.3) на производстве, но оба проекта не работали в контейнере ddev. Там slugCandidates всегда пропускали свой последний символ.

Изменение шаблона с «все, кроме косой черты» на «точно косая черта» заставляет его работать.

public function getRoutePathRedecorationPattern(): string
{
    return '\/$';
}
0 голосов
/ 04 ноября 2018

Чтобы всегда добавлять добавляемый /, вы можете создать декоратор для улучшения маршрута и поместить его в свой пакет сайта.

Создайте файл в пакете вашего сайта под Classes/Routing/Enhancer/ForceAppendingSlashDecorator.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 . '/');
        }
    }
}

Пожалуйста, замените правильное пространство имен, соответствующее вашему сайту.

Чтобы зарегистрировать свой усилитель маршрута, добавьте строку к вашему ext_localconf.php:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['enhancers']['ForceAppendingSlash'] = \MyVendor\SitePackage\Routing\Enhancer\ForceAppendingSlashDecorator::class;

В качестве последнего шага добавьте следующий код в файл yaml конфигурации вашего сайта:

routeEnhancers:
  PageTypeSuffix:
    type: ForceAppendingSlash

После этих настроек TYPO3 всегда будет добавлять добавление / к вашим URL, чтобы новые URL соответствовали старым, созданным realurl.

...