2012-03-18 2 views
0

Я в процессе миграции моего старого домена в новый домен с помощью Modified Apache Mod-Rewrite и его файла .htaccess. мы имеем почти ту же структуру нового домена, который включает в себяПеренаправление старого domian в новый домен .htaccess

  1. URL в
  2. Database

кроме доменного имени, как это было www.oldurl.com и теперь его как www.newurl. ком, и это то, что я имею в моем .htaccess файл старого домена

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

Выше настройки, кажется, работает нормально, за исключением одного случая, мы ч ave несколько URL-адресов в моем старом домене, который был удален или структура была изменена, поэтому в этом случае выше правило не будет работать. Я узнал о добавлении чего-то подобного в мой файл .htaccess рядом с тем, что я описал выше.

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
Redirect 301 /my-page http://www.newurl.com/your-page 

У меня есть всего 20+ таких URL-адресов, и мне интересно, нужно ли мне сопоставлять эти 20+ URL-адреса с новыми URL-адресами, и мне нужно будет позаботиться о любом порядке, в котором они должны быть помещены в файл.

Мне также интересно, как Apache будет работать, будет ли он смотреть на каждый сопоставленный URL-адрес для любого соответствия? или он работает каким-то другим способом?

ответ

1

директива Redirect не будет привязана к RewriteCond условиям и всегда будет перенаправлять /моя страница- к http://www.newurl.com/your-page, также, mod_rewrite имеет приоритет над mod_alias поэтому применяется правило RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L]до директива Redirect. Однако, если файл .htaccess находится в корневом каталоге документов как oldurl.com и newurl.com доменов, то Redirect директива будет применяться после того, как браузер перенаправляется на http://www.newurl.com/my-page, таким образом перенаправлять (снова) к http://www.newurl.com/your-page

Итак, это не имеет значения, в каком порядке у вас есть, поскольку mod_rewrite применяется первым. Если у вас есть 20 URL-адресов, которые необходимо перенаправить на новые на вашем новом сайте, вы можете перечислить их каждый в своем собственном Redirect. В противном случае, если вы не хотите иметь браузер попадают в два раза, вы можете перечислить их с помощью mod_rewrite двигателя:

RewriteEngine On 

# redirect the changed URLs individually 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page$ http://www.newurl.com/your-page [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page2$ http://www.newurl.com/your-page2 [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^my-page3$ http://www.newurl.com/your-page3 [R=301,L] 

# Finally, redirect everything else as-is 
RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 

Обратите внимание, что заказ делает здесь дела. Чтобы повторить 2 условия для HTTP_HOST, это некрасиво, вы можете обойти это, используя SKIP, но, вероятно, лучше просто повторить их. Но если у вас есть доступ к конфигурации вашего сервера или конфигурации vhost, взгляните на RewriteMap Directive, что позволяет вам создавать сопоставление старых URL-адресов с вашими новыми URL-адресами, и вы можете уменьшить все отдельные измененные перезаписи URL-адресов на одиночный один:

Внутри вашего сервера/ВХост конфигурации, что-то вроде этого:

RewriteMap newurls txt:/path/to/file/map.txt 

Где /путь/к/файлу/карта.TXT будет выглядеть примерно так:

my-page your-page 
my-page2 your-page2 
my-page3 your-page3 
etc... 

И ваши объединенных правила будут выглядеть следующим образом:

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule ^(.*)$ http://www.newurl.com/${newurls:$1} [R=301,L] 

RewriteCond %{HTTP_HOST} ^oldurl.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www.oldurl.com$ 
RewriteRule (.*)$ http://www.newurl.com/$1 [R=301,L] 
+0

Спасибо за ценный вклад, но, к сожалению, я не имею доступ к 'сервера config' или' ВХоста конфигурации 'файл (общий хостинг), поэтому я считаю, что мне нужно остановиться, чтобы перечислить URL-адрес, как вам было предложено. –

Смежные вопросы