пересылать все письма с одного компьютера на почтовый сервер postfix

Я использую несколько серверов, которые генерируют письма из-за заданий cron или других проблем. В настоящий момент один из них действует как мой почтовый сервер (postfix / dovecot) и принимает почту для «abc.com» и «def.com».

Сейчас я пытаюсь перенаправить всю почту с других серверов на один почтовый аккаунт на моем почтовом сервере:

  • ВСЕ (!) письма на любую локальную учетную запись, скажем, "webserver1.def.com" (на которой запущен exim4), должны отправляться на "system@abc.com "
  • письма следует отправлять как, например," root@webserver1.dev.comоднако мои правила, похоже, хотят удалить только первую папку, а не весь путь.

    Вот правило, с которым я тестирую, обратите внимание, я переписываю обратную ссылку в строку запроса только для отладки!

    RewriteRule ^folder1/folder2/folder3/(.*)$ http://domain.com/?one=$1&two=$2 [L,NC,R=301]
    

    Итак, в essance I требуется domain.com/folder1/folder2/folder3/?query=string для перенаправления на domain.com/?query=string .

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

    Проблема в том, что с указанным выше правилом я получаю результат

    domain.com/?one=folder2/folder3/folder2/folder3/&two=
    

    Как вы можете видеть, похоже, что он принимает первое совпадение каталога (начиная с с папкой1), но затем он, кажется, берет оставшуюся часть пути, который я хочу удалить, дублирует его и устанавливает ist в качестве первой совпавшей группы!

    Это не то, что я хочу, я хочу сопоставить все 3 папки, удалить их и добавить остальную часть URL, что бы это ни было (строка запроса и др.).

    Кто-нибудь хочет меня поправить? При желании представление о том, что я сделал не так, было бы полезно, но не обязательно (рискуя развить мое понимание RegEx)

    К вашему сведению: папок не существует, это лишь пути для маршрутизации.

    Заранее спасибо !

    Изменить : ответ на дубликат

    Этот вопрос был помечен как дубликат этого распространенного (и наиболее ценного) сообщения: Перенаправить, изменить URL-адреса или перенаправить HTTP на HTTPS в Apache - все, что вы когда-либо Хотел узнать о правилах Mod_Rewrite, но боялся спросить

    Я просмотрел этот пост, однако я не могу видеть, какая его часть связана с переписыванием пути, о чем я конкретно спрашивал, или какой-либо частью, которая объясняет результат, который я получаю. Поэтому я уточню ...

    Действительно, несколько примеров действительно смотрят на более глубокие каталоги / пути, чем одна глубина, как это из sysadmin2218:

    RewriteRule ^/blog/([0-9]{4})/([-0-9a-zA-Z]*)\.html   /newblog/$1/$2.shtml
    
    RewriteRule ^/blog/([0-9]{4})/([-a-z]*)\.html  /newblog/$1/$2.shtml
    

    Однако я не испытывал этого правильного сопоставления. Это суть моего вопроса , несмотря на следующие примеры и справочную страницу, я, похоже, получаю неожиданные результаты, поэтому я задал этот вопрос, чтобы выяснить, в чем моя ошибка. Я могу прочитать еще 20 сообщений RewriteRule (с тех пор, как я прочитал последние 30 или около того перед публикацией), но я не приблизился к тому, чтобы увидеть, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    Моя консультация например, из sysadmin2218:

    RewriteRule ^/blog/([0-9]{4})/([-0-9a-zA-Z]*)\.html   /newblog/$1/$2.shtml
    
    RewriteRule ^/blog/([0-9]{4})/([-a-z]*)\.html  /newblog/$1/$2.shtml
    

    Однако я не испытываю этого правильного сопоставления. Это суть моего вопроса , несмотря на следующие примеры и справочную страницу, я, похоже, получаю неожиданные результаты, поэтому я задал этот вопрос, чтобы выяснить, в чем моя ошибка. Я могу прочитать еще 20 сообщений RewriteRule (с тех пор, как я прочитал последние 30 или около того перед публикацией), но я не приблизился к тому, чтобы увидеть, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    Моя консультация как это из sysadmin2218:

    RewriteRule ^/blog/([0-9]{4})/([-0-9a-zA-Z]*)\.html   /newblog/$1/$2.shtml
    
    RewriteRule ^/blog/([0-9]{4})/([-a-z]*)\.html  /newblog/$1/$2.shtml
    

    Однако я не испытываю этого правильного сопоставления. Это суть моего вопроса , несмотря на следующие примеры и справочную страницу, я, похоже, получаю неожиданные результаты, поэтому я задал этот вопрос, чтобы выяснить, в чем моя ошибка. Я могу прочитать еще 20 сообщений RewriteRule (с тех пор, как я прочитал последние 30 или около того перед публикацией), но я не приблизился к тому, чтобы увидеть, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    ] Моя консультация Это суть моего вопроса , несмотря на следующие примеры и справочную страницу, я, похоже, получаю неожиданные результаты, поэтому я задал этот вопрос, чтобы выяснить, в чем моя ошибка. Я могу прочитать еще 20 сообщений RewriteRule (с тех пор, как я прочитал последние 30 или около того перед публикацией), но я не приблизился к тому, чтобы увидеть, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    Моя консультация Это суть моего вопроса , несмотря на следующие примеры и справочную страницу, я, похоже, получаю неожиданные результаты, поэтому я задал этот вопрос, чтобы выяснить, в чем моя ошибка. Я могу прочитать еще 20 сообщений RewriteRule (с тех пор, как я прочитал последние 30 или около того перед публикацией), но я не приблизился к тому, чтобы увидеть, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    Моя консультация Я прочитал перед публикацией), но я не собираюсь понять, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    Моя консультация прочитал перед публикацией), но я не собираюсь понять, что не так с моим правилом.

    Если кто-нибудь сможет указать на мою ошибку или расширить свое понимание, я извлечу уроки из этого и больше не буду задавать этот вопрос, но, похоже, я не могу придумать ответ из связанной или иной публикации в Интернете.

    Моя консультация и моя разбивка того, что я ожидаю

     RewriteRule ^folder1/folder2/folder3(.*)$ newfolder/$1 [L,NC,R=301]
    

    Итак, мы можем предположить, что строка запроса имеет дело, для меня шаблон говорит, что соответствует веб-пути (помните, что RewriteBase / действует), который начинается с folder1 / folder2 / folder3, назначьте оставшийся URI до конца до первой группы ($ 1), которая будет /? key0 = keep . Тогда шаблон будет новой папкой /? Key0 = keep.

    Это не мой опыт, однако ... хотя строка запроса верна в моем результате, совпадение, похоже, втягивает folder2 / folder3 / , дублирует его, добавляет его перед строкой запроса и идет с этим ...

    Я запутался здесь ... (пожалуйста, помогите !!)

0
задан 13 April 2017 в 15:14
1 ответ

Хорошо, итак, я отследил свою проблему и в духе Stack Exchange я хотел поделиться своим ответом.

Я должен начать с признания, я не упоминал версию Apache, которую я использовал, я использую Apache 2.4.

Оказывается, в конце концов, меня укусил сообщённый баг в Apache (2.2 -> 2.4), а именно Bug 38642 - mod_rewrite добавляет постфикс path info postfix после того, как произошла замена.

Баг инсайта неправильно добавляет путь, когда делается замена, Поэтому после каждого из моих RewriteRules, влияющих на строку запроса, путь действительно был применен заново.

Как сообщается, ошибка исправлена в Apache 2.5, и есть работа, связанная с использованием DPI-флага в правилах перезаписи.

Это делает мой пример таким:

# Activate Rewrite and set the base to the web path
RewriteEngine On
RewriteBase /

# Remove 'key1' from the Querystring, and remove any resulting double &'s
RewriteCond %{QUERY_STRING} (.*)(?:^|&)key1=(?:[^&]*)((?:&|$).*)     
RewriteCond %1%2 (^|&)([^&].*|$)    
RewriteRule ^(.*)/$ $1?%2  [DPI,E=querycleaned:1]

#Remove 'key2' from the resulting URI, and remove double & again
RewriteCond %{QUERY_STRING} (.*)(?:^|&)key2=(?:[^&]*)((?:&|$).*)    
RewriteCond %1%2 (^|&)([^&].*|$)    
RewriteRule ^(.*)/$ $1?%2 [DPI,E=querycleaned:1]

#Catch and handle requests beginning with 'oldfolder'
#$1 = non greedy match everything following oldfolder
RewriteRule ^oldfolder(.*)$ $1 [L,NC,R=301]

#Catch the folder1/folder2/folder3 path and rewrite
RewriteRule ^folder1/folder2/folder3(.*)$ newfolder$1 [L,NC,R=301]

#Catchall, if query string cleaned but not previously matched, then redirect to clean string
RewriteCond %{ENV:querycleaned} 1
RewriteRule ^(.*)$ $1 [L,R=301]

Как видите, DPI флаг добавляется к любому правилу, которое может внести изменения, но не помечен как Last. Вы также можете заметить флаг E=querycleaned:1. Это просто установка Enviroment Variable для того, чтобы перехватить все, вы видите, что пример с ориентацией очистит строку запроса, если одно из следующих правил Rewrite rules matchd (начинается со старой папки или папки1/папки2/папки3), однако я хотел, чтобы строка запроса была очищена вне зависимости от этого, поэтому Basicall я устанавливаю переменную, чтобы указать, был ли очищен запрос, если это так, то вы заметите новое правило catch all внизу, которое перенаправляет на существующий путь, с чистым запросом.

Вот так, решено и решено. Однако, в интересах справедливости, как только я узнал решение, я смог найти здесь пару дублирующих друг друга вопросов, так что я был не первым. Я даже не могу найти вопрос, который впервые нашел в своей истории, но быстрый поиск по DPI дает несколько результатов.

.
0
ответ дан 24 November 2019 в 05:48

Теги

Похожие вопросы