diff --git a/redirect.routing.yml b/redirect.routing.yml index 26fcb45..ca5e663 100644 --- a/redirect.routing.yml +++ b/redirect.routing.yml @@ -63,4 +63,4 @@ redirect.domain_redirect: _title: 'Domain redirects' _form: '\Drupal\redirect\Form\RedirectDomainForm' requirements: - _permission: 'administer redirects' \ No newline at end of file + _permission: 'administer redirects' diff --git a/src/EventSubscriber/RedirectRequestSubscriber.php b/src/EventSubscriber/RedirectRequestSubscriber.php index 2855740..ec549a6 100644 --- a/src/EventSubscriber/RedirectRequestSubscriber.php +++ b/src/EventSubscriber/RedirectRequestSubscriber.php @@ -135,6 +135,8 @@ class RedirectRequestSubscriber implements EventSubscriberInterface { if ($this->domainConfig) { $domains = $this->domainConfig->get('domain_redirects'); if (!empty($domains)) { + $host = $request->getHost(); + $path = $request->getRequestUri(); $from_domain = $request->getHost() . $request->getRequestUri(); $to_domain = NULL; // Checks if there is a redirect domain in the configuration. @@ -143,6 +145,16 @@ class RedirectRequestSubscriber implements EventSubscriberInterface { $to_domain = $domain['to']; break; } + // Check for a wildcard in the domains. + if (strpos($domain['from'], '*')) { + $replace_path = substr($domain['from'], strpos($domain['from'], '/')); + $domain_base_uri = substr($domain['from'], 0, -2); + if (strpos($from_domain, $domain_base_uri) !== FALSE) { + $sub_path = substr($path, strlen($replace_path) - 2); + $to_domain = $domain['to'] . $sub_path; + break; + } + } } if ($to_domain) { $response = new TrustedRedirectResponse($to_domain); diff --git a/src/Form/RedirectDomainForm.php b/src/Form/RedirectDomainForm.php index 629168b..ac02587 100644 --- a/src/Form/RedirectDomainForm.php +++ b/src/Form/RedirectDomainForm.php @@ -32,7 +32,7 @@ class RedirectDomainForm extends ConfigFormBase { * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { - if ($form_state->get('maximum_domains') === NULL) { + if (!$form_state->has('maximum_domains')) { $form_state->set('maximum_domains', 1); } @@ -123,7 +123,7 @@ class RedirectDomainForm extends ConfigFormBase { parent::validateForm($form, $form_state); if ($redirects = $form_state->getValue('redirects')) { foreach ($redirects as $redirect) { - if (strpos($redirect['from'], 'http://') !==FALSE || strpos($redirect['from'], 'https://') !== FALSE || strpos($redirect['to'], 'http://') !==FALSE || strpos($redirect['to'], 'https://') !== FALSE) { + if (strpos($redirect['from'], '://') !== FALSE || strpos($redirect['to'], '://') !== FALSE) { $form_state->setErrorByName('redirects', t('No protocol should be included in the redirect domain.')); } } @@ -135,7 +135,7 @@ class RedirectDomainForm extends ConfigFormBase { */ public function submitForm(array &$form, FormStateInterface $form_state) { $domain_redirects = []; - $domain_config = $this->configFactory()->getEditable('redirect.domain'); + $domain_config = $this->config('redirect.domain'); if ($redirects = $form_state->getValue('redirects')) { foreach ($redirects as $redirect) {