web-dev-qa-db-ja.com

正規表現に一致するパスにアクセスするユーザーをリダイレクトするにはどうすればよいですか?

私の質問は /index.php/event/*から/ eventにリダイレクトする方法と同じです がDrupal 8。

その質問の承認された回答で提案されているモジュールにはDrupal 8のバージョンがないため、Drupal 8で同じことを行うにはどうすればよいですか?

3
Tran

Drupal 8では、このためにイベントサブスクライバーを使用します。REQUESTカーネルイベントにサブスクライブし、リクエストから元のURLを取得し、正規表現を適用します。置換が見つかった場合は、新しいURLを設定します301リダイレクト応答として。

mymodule/src/EventSubscriber/RedirectSubscriber.php

<?php

namespace Drupal\mymodule\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Drupal\Core\Routing\TrustedRedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;

class RedirectSubscriber implements EventSubscriberInterface {

  public function redirectIndexPHP(GetResponseEvent $event) {
    $old_url = $event->getRequest()->getUri();
    $new_url = preg_replace('|/index.php|', '', $old_url, 1, $count);
    if ($count > 0) {
      $response = new TrustedRedirectResponse($new_url, 301);
      $event->setResponse($response);
    }
  }

  static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('redirectIndexPHP', 39);
    return $events;
  }

}

mymodule/mymodule.services.yml

services:
  mymodule.redirect:
    class: Drupal\mymodule\EventSubscriber\RedirectSubscriber
    arguments: []
    tags:
      - { name: event_subscriber }
2
4k4

私はあなたが次のようにそれを行うことができると信じています(試されていない):

use \Symfony\Component\HttpFoundation;

function somePageCallback()
{
   ...

   return new RedirectResponse('/path/to/redirect/to');
}
0
Jaypan

これは、Drupalルートディレクトリにある.htaccessファイルに書き込まれる書き換えルールです。

RewriteEngine on
RewriteCond %{REQUEST_URI} index.php/event/
RewriteRule ^(.*) http://www.domain.com/event [L,R=301]

それはあなたにとって理にかなっています。

0
Ashish Deynap