Human readable URLs

Slug configuration (since TYPO3 9.5)

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    map:
      shop.json: 1496773586
  ShopProductsPlugin:
    type: Extbase
    limitToPages:
      - 50
    extension: Shop
    plugin: Products
    routes:
      -
        routePath: '/{product_slug}'
        _controller: 'Product::show'
        _arguments:
          product_slug: product
    defaultController: 'Product::list'
    aspects:
      product_slug:
        type: PersistedAliasMapper
        tableName: tx_shop_domain_model_product
        routeFieldName: slug
        routeValuePrefix: /
  ShopCheckoutPlugin:
    type: Extbase
    limitToPages:
        - 54
    extension: Shop
    plugin: BasketOrder
    routes:
      - routePath: '/{checkout_type}'
        _controller: 'BasketOrder::checkout'
        _arguments:
          checkout_type: type
      - routePath: '/{checkout_type}/confirm'
        _controller: 'BasketOrder::confirmOrder'
        _arguments:
          checkout_type: type
      - routePath: '/{checkout_type}/cancel/{basket_order}'
        _controller: 'BasketOrder::cancel'
        _arguments:
          checkout_type: type
          basket_order: basketOrder
      - routePath: '/{checkout_type}/callback'
        _controller: 'BasketOrder::callback'
        _arguments:
          checkout_type: type
      - routePath: '/{checkout_type}/success/{basket_order}'
        _controller: 'BasketOrder::success'
        _arguments:
          checkout_type: type
          basket_order: basketOrder
      - routePath: '/{checkout_type}/error/{basket_order}'
        _controller: 'BasketOrder::error'
        _arguments:
          checkout_type: type
          basket_order: basketOrder
      - routePath: '/success'
        _controller: 'BasketOrder::success'
    aspects:
      checkout_type:
        type: StaticValueMapper
        map:
          on-invoice: onInvoice
          pre-payment: prePayment
          pay-pal: payPal
          request: request
      basket_order:
        type: PersistedAliasMapper
        tableName: tx_shop_domain_model_basketorder
        routeFieldName: uid

Realurl configuration

$configuration = [

    'fixedPostVars' => [
        'shopConfiguration' => [
                0 => [
                    'GETvar' => 'tx_shop_products[action]',
                    'valueMap' => [
                        'show' => '',
                    ],
                    'noMatch' => 'bypass',
                ],
                1 => [
                    'GETvar' => 'tx_shop_products[controller]',
                    'valueMap' => [],
                    'noMatch' => 'bypass',
                ],
                2 => [
                    'GETvar' => 'tx_shop_products[product]',
                    'lookUpTable' => [
                        'table' => 'tx_shop_domain_model_product',
                        'id_field' => 'uid',
                        'alias_field' => 'title',
                        //'alias_field' => "CONCAT(title, '-', sub_title)",
                        'addWhereClause' => ' AND NOT deleted',
                        'useUniqueCache' => 1,
                        'useUniqueCache_conf' => [
                            'strtolower' => 1,
                            'spaceCharacter' => '-',
                        ],
                        'languageGetVar' => 'L',
                        'languageExceptionUids' => '',
                        'languageField' => 'sys_language_uid',
                        'transOrigPointerField' => 'l10n_parent',
                        'autoUpdate' => 1,
                        'expireDays' => 180,
                    ],
                ],
            ],
            17 => 'shopConfiguration',
    ],

];