Проблема с несколькими путями к новому перенаправлению домена, когда в паре с резервным для всего остального - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь перенаправить указанные c пути на старом сайте для указания c путей на новом домене. Для всего, что не указано в путях, я хочу, чтобы оно перенаправлялось на базовый путь нового домена. Я могу получить указанные c пути к работе, но как только я настрою перенаправление для всего остального, он просто выдвигает все пути к базовому пути в новом домене.

Пример того, что разыскивается:

  http://www.olddomain.com/australia
  http://www.olddomain.com/australia/hello
  # Both go to http://www.newdomain.com/australia

  http://www.olddomain.com/brazil
  http://www.olddomain.com/brazil/hello
  # Both go to http://www.newdomain.com/brazil

  http://www.olddomain.com/china
  http://www.olddomain.com/australia/hello
  # Both go to http://www.newdomain.com/china

  http://www.olddomain.com/some-landing-page
  # Goes to http://www.newdomain.com

Вот что я использую:

  RedirectMatch 301 ^/brazil/(.+)$ https://www.newdomain.com/pt-br/brazil
  RedirectMatch 301 ^/australia/(.+)$ https://www.newdomain.com/en-au/australia
  RedirectMatch 301 ^/china/(.+)$ https://www.newdomain.com/en-cn/china
  RedirectMatch 301 ^/colombia/(.+)$ https://www.newdomain.com/es-co/colombia
  RedirectMatch 301 ^/india/(.+)$ https://www.newdomain.com/en-in/india
  RedirectMatch 301 ^/indonesia/(.+)$ https://www.newdomain.com/indonesia
  RedirectMatch 301 ^/italy/(.+)$ https://www.newdomain.com/it-it/italy
  RedirectMatch 301 ^/japan/(.+)$ https://www.newdomain.com
  RedirectMatch 301 ^/malaysia/(.+)$ https://www.newdomain.com/en-my/malaysia
  RedirectMatch 301 ^/mexico/(.+)$ https://www.newdomain.com/es-mx/mexico
  RedirectMatch 301 ^/poland/(.+)$ https://www.newdomain.com/en-pl/poland
  RedirectMatch 301 ^/singapore/(.+)$ https://www.newdomain.com/en-sg/singapore
  RedirectMatch 301 ^/south-africa/(.+)$ https://www.newdomain.com/en-za/south-africa
  RedirectMatch 301 ^/se-asia/(.+)$ https://www.newdomain.com/asia
  RedirectMatch 301 ^/office/united-kingdom/london/contact-us(.*)$ https://www.newdomain.com/en-gb/united-kingdom
  RedirectMatch 301 ^/united-kingdom/(.+)$ https://www.newdomain.com/en-gb/united-kingdom
  RedirectMatch 301 ^/united-states/(.+)$ https://www.newdomain.com/en-us/united-states

  # Everything else
  RedirectMatch 301 ^/(.*)$ https://www.newdomain.com

Когда я оставляю этот бит под «Все остальное» включенным, он толкает все для newdomain.com. Тем не менее, когда я отключаю его, все пути, которые я указываю, работают, как задумано, но остальные остаются на старом домене.

Я также попробовал это:

  RewriteRule ^(.*)$ https://www.newdomain.com [R=301,NC]

И это:

RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^olddomaincom\.docksal$ [NC]
RewriteRule ^ http%{ENV:protossl}://www.newdomain.com [R=301,L]

Что я делаю не так? Как заставить его делать все то, что я хочу? В частности, как мне заставить его выполнить «RedirectMatch», как только он совпадет?

1 Ответ

0 голосов
/ 23 января 2020

Держите каждое правило на mod_rewrite, и должны очистить кеш браузера перед проверкой:

RewriteEngine On

RewriteRule ^brazil/(.+)$ https://www.newdomain.com/pt-br/brazil [L,R=301,NC]
RewriteRule ^australia/(.+)$ https://www.newdomain.com/en-au/australia [L,R=301,NC]
RewriteRule ^china/(.+)$ https://www.newdomain.com/en-cn/china [L,R=301,NC]
RewriteRule ^colombia/(.+)$ https://www.newdomain.com/es-co/colombia [L,R=301,NC]
RewriteRule ^india/(.+)$ https://www.newdomain.com/en-in/india [L,R=301,NC]
# and all other specific rules


# and catch-all rule
RewriteCond %{HTTP_HOST} ^(www\.)?olddomain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^olddomaincom\.docksal$ [NC]
RewriteRule ^ https://www.newdomain.com [R=301,L]
...