Jak utworzyć przekierowanie programowo? [Zamknięte]

14

Próbuję utworzyć przekierowanie 301 za pomocą modułu przekierowania . Na przykład chcę przekierować źródło adresu URL na wewnętrzny adres URL za pośrednictwem mojego modułu niestandardowego.

Chcę utworzyć przekierowanie podczas tworzenia węzła. Zaimportuj starą treść, utwórz nowy węzeł i zachowaj starą ścieżkę.

Czy ktoś ma pomysł?

Romest
źródło
1
Zdecydowanie powinieneś dodać więcej informacji do swojego pytania. Czego spróbowałeś do tej pory? Jaki jest twój dokładny problem? Dlaczego nie wspominasz o migracji wspomnianej w komentarzu do jednej z odpowiedzi?
leymannx
Możesz użyć poniższych fragmentów kodu, aby utworzyć programowo przekierowanie adresu URL. // Utwórz obiekt z parametrami przekierowania $ redirect = new stdClass (); redirect_object_prepare (przekierowanie $); $ redirect-> source = 'old-url'; $ redirect-> source_options = array (); $ redirect-> redirect = 'node / 5'; // Nowa ścieżka systemowa $ redirect-> redirect_options = array (); $ redirect-> type = 'redirect'; $ redirect-> language = LANGUAGE_NONE; redirect_save ($ redirect);
Aryashree Pritikrishna

Odpowiedzi:

24

Jeśli chcesz przechowywać przekierowania w bazie danych, użyj modułu Przekieruj . Ten moduł zapewnia interfejs użytkownika do dodawania przekierowań. Przekierowania są przechowywane w encji treści, którą można również utworzyć programowo:

use Drupal\redirect\Entity\Redirect;

  Redirect::create([
    'redirect_source' => 'redirects/redirect1',
    'redirect_redirect' => 'internal:/node/1',
    'language' => 'und',
    'status_code' => '301',
  ])->save();

Możesz to zrobić w momencie tworzenia węzłów z zaimportowanych danych lub umieścić kod w zaczepach encji, który aktualizuje przekierowania podczas tworzenia, edytowania lub usuwania węzła.

4k4
źródło
6

Możesz użyć tego RedirectResponsedo osiągnięcia.

Zobacz poniższy link

/drupal//a/138852

Immanuel Paul
źródło
Dziękuję za odpowiedź. Ale chcę utworzyć przekierowanie podczas tworzenia węzła. Importuję starą treść w celu utworzenia nowego węzła i zachowuję starą ścieżkę.
Romest,
4

Możesz zmienić swój .htaccess, dodając ten kod:

#custom redirects
RewriteRule ^old/URL/path$ http://example.com/new/path [R=301,L]
#end custom redirects

Lub jeśli chcesz to zrobić w Drupal:

return new RedirectResponse(Drupal\Core\Url::fromUri('route_name')); 
Tijani nasser
źródło