私の質問は /index.php/event/*から/ eventにリダイレクトする方法と同じです がDrupal 8。
その質問の承認された回答で提案されているモジュールにはDrupal 8のバージョンがないため、Drupal 8で同じことを行うにはどうすればよいですか?
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 }
私はあなたが次のようにそれを行うことができると信じています(試されていない):
use \Symfony\Component\HttpFoundation;
function somePageCallback()
{
...
return new RedirectResponse('/path/to/redirect/to');
}
これは、Drupalルートディレクトリにある.htaccessファイルに書き込まれる書き換えルールです。
RewriteEngine on
RewriteCond %{REQUEST_URI} index.php/event/
RewriteRule ^(.*) http://www.domain.com/event [L,R=301]
それはあなたにとって理にかなっています。