Перепишите URL-адреса для перенаправления и удаления начального нуля

У меня есть два блога на двух разных доменах, которые я объединяю на одном сайте. Я не слишком знаком с администратором сервера, но я на 99% уверен, что то, что я хочу сделать, возможно на bluehost (поскольку они разрешают .htaccess) и с использованием mod_rewrite (или аналогичного).

В настоящее время у меня есть blog1.com и blog2.com, а URL-адреса сообщений выглядят как blog1.com/001 и blog2.com/030. Я хочу, чтобы любой, кто вводит один из этих URL-адресов, был перенаправлен на example.com/blog1/1 и example.com/blog2/30.

Это означает, что мне нужно:

  1. Перенаправить весь домен в папку на моем новом домене
  2. Перенаправление обращений на URL-адрес с начальными нулями на URL-адреса без начальных нулей
  3. Вероятно, это означает перенаправление blog1.com/001 и example.com/blog1/001 на example.com/blog1/1

ОБНОВЛЕНО

На http://htaccess.madewithlove.be выполняются 1-е и 2-е условия, но правила не срабатывают.

3-й полностью ломается и возвращает странность: http://example.com/blog1/030log1/030

RewriteEngine On

# redirect blog1.com/030 => example.com/blog1/30
RewriteCond %{HTTP_HOST} ^(?:www\.)?(blog1|blog2)\. [NC]
RewriteRule ^0*([1-9]+)/?$ http://example.com/%1/$1 [R=301,L]

# redirect example.com/blog1/030 => example.com/blog1/30
RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(blog1|blog2)/0*([1-9]+)/?$ /$1/$2 [NC,R=301,L]

# Never use www
RewriteCond %{HTTP_HOST} ^www.(([a-z0-9_]+.)?example.com)$ [NC]
RewriteRule .? http://%1%{REQUEST_URI} [R=301,L]]

person lyonsinbeta    schedule 22.01.2015    source источник


Ответы (1)


Вы можете использовать этот код в своем DOCUMENT_ROOT/.htaccess файле доменов blog1 и blog2:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(?:www\.)?(blog1|blog2)\. [NC]
RewriteRule ^0*([1-9]+)/?$ http://example.com/%1/$1 [R=302,L]

# rule2 for example.com/blog1/030 => example.com/blog1/30
RewriteCond %{HTTP_HOST} ^(?:www\.)?example\.com$ [NC]
RewriteRule ^(blog1|blog2)/0+([1-9]+)/?$ /$1/$2 [NC,R=302,L]
  • %1 является обратной ссылкой на blog1 или blog2 в RewriteCond
  • ^0*([1-9]+) будет соответствовать всем ведущим нулям, оставляя только ненулевые числа в $1
person anubhava    schedule 22.01.2015
comment
Что ж, это кажется достаточно простым. Большое спасибо за объяснение. Являются ли правила ванильных регулярных выражений? Подмножество? Суперсет? - person lyonsinbeta; 22.01.2015
comment
Я проверяю это на htaccess.madewithlove.be, и правило работает (отлично, спасибо!), но example.com/a/030 не перенаправляет на example.com/a/30, как ожидалось. Должно ли это быть собственным условием/правилом? - person lyonsinbeta; 23.01.2015
comment
Но что такое каталог /a/. Это правило берет часть имени хоста из RewriteCond и в новом запросе нет a. - person anubhava; 23.01.2015
comment
Извините, что я сделал то, что вы смешиваете свои примеры и сбиваете с толку людей, пытающихся вам помочь. Я имею в виду следующее: example.com/blog1/030 не перенаправляет на example.com/blog1/30, как ожидалось. Должно ли это быть собственным условием/правилом? - person lyonsinbeta; 23.01.2015
comment
1. Никогда не размещайте код в комментариях, его никто не сможет прочитать. 2. Никогда не тестируйте на этом сайте, он ненадежен. 3. Четко укажите, для какого URL он не работает. - person anubhava; 23.01.2015
comment
Я думал, что удалил этот комментарий после того, как увидел, как ужасно он был отформатирован. Его больше нет. Я обновил свой вопрос выше тем, что я пытался вписать в комментарий. Если я не могу протестировать там, есть ли у вас другая рекомендация? - person lyonsinbeta; 23.01.2015
comment
Лучше протестировать на локальном веб-сервере. Я внес небольшое редактирование, и оно отлично работало для всех условий на моем Apache. - person anubhava; 23.01.2015