301 Перенаправление на новый домен с некоторыми определенными URL-адресами

0

Вопрос

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

Я перемещаю свой старый веб-сайт на новый, и некоторые URL-адреса меняются.

Я хотел бы сделать общее перенаправление 301 на новый домен (потому что большинство путей одинаковы), при этом по отдельности перенаправляя некоторые URL-адреса.

Вот что у меня есть на моем старом сайте .htaccess :

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^old\.com$ [OR]
  RewriteCond %{HTTP_HOST} ^www\.old\.com$
  RewriteRule (.*)$ https://new.com/$1 [R=301,L]

  Redirect 301 "/custom/url/" "https://new.com/my-custom-url"
</IfModule>

Но 301 перенаправляет на : https://new.com/custom/url вместо https://new.com/my-custom-url

Некоторые из моих URL-адресов также имеют параметры URL-адреса, которые я хотел бы перенаправить, такие как :

Redirect 301 "/brand.php?name=Example" "https://new.com/Example"
Redirect 301 "/brand.php?name=Example2" "https://new.com/another/url"

которые, похоже, тоже не работают.

Большое вам спасибо за вашу помощь.

.htaccess redirect seo
2021-11-22 19:48:11
1

Лучший ответ

2

Но 301 перенаправляет на : https://new.com/custom/url вместо https://new.com/my-custom-url

Это происходит потому, что ваше конкретное правило перенаправления появляется после общего. Более того, вы смешиваете правила mod_rewrite с правилами mod_alias, и они вызываются в разное время.

Пусть это будет так:

RewriteEngine On

# redirect /brand.php?name=Example2 to new.com/another/Example2
RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC]
RewriteCond %{QUERY_STRING} ^name=(Example2) [NC]
RewriteRule ^brand\.php$ https://new.com/another/%1? [R=301,L,NE]

# redirect /brand.php?name=Example3 to new.com/category/Example3
RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC]
RewriteCond %{QUERY_STRING} ^name=(Example3) [NC]
RewriteRule ^brand\.php$ https://new.com/category/%1? [R=301,L,NE]

# generic redirect /brand.php?name=Example to new.com/Example2
RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC]
RewriteCond %{QUERY_STRING} ^name=([^&]+) [NC]
RewriteRule ^brand\.php$ https://new.com/%1? [R=301,L,NE]

# redirect custom URL
RewriteRule ^custom/url/ https://new.com/my-custom-url [R=301,L,NE,NC]

# redirect everything else
RewriteCond %{HTTP_HOST} ^(www\.)?old\.com$ [NC]
RewriteRule ^ https://new.com%{REQUEST_URI} [R=301,L]
2021-11-23 19:38:59

Это работает, спасибо. У меня есть еще один вопрос : как я могу перенаправлять параметры URL по отдельности, а не общее правило ? Например "old.com/brand.php?name=Example" для "new.com/brand/example" И "old.com/brand.php?name=Example2" чтобы "new.com/example2" ?
Malcom

Извините, я не знаю, как это использовать. Я пытался : RewriteCond %{THE_REQUEST} /brand\.php\?name=([mybrandname) [NC] RewriteRule ^ https://new.com/brands/mybrandname [R=301,L,NE] Который возвращает ошибку 500
Malcom

Может быть, я был недостаточно ясен, но каждый brand.php?name=something необходимо перенаправить на отдельный URL-адрес. Я не уверен, как соответствующим образом отредактировать ваш пример. brand.php?name=brand1 необходимо перенаправить на new.com/product-category/brand1 и brand.php?name=brand2 необходимо перенаправить на new.com/brand2 (например)
Malcom

Этот /product-category/ это новое дополнение, которое не было включено в первоначальное требование. Текущее правило является общим, поэтому brand.php?name=anything будет перенаправлен на new.com/anything. Любые конкретные случаи, которые вы можете настроить самостоятельно, изменив: RewriteCond %{QUERY_STRING} ^name=([^&]+) [NC]
anubhava

Проверьте мой обновленный ответ сейчас, чтобы увидеть конкретные и общие правила перенаправления
anubhava

Это прекрасно, большое вам спасибо за ваше время и вашу помощь.
Malcom

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................