Apache: перенаправление всего каталога в корневой каталог другого сайта


Я хочу перенаправить все из определенного подкаталога в корень другого сайта, т.Е. без подкаталогов:

  • example.com/jobs следует перенаправить на jobs.example.net
  • все пути позади /jobs должны быть опущены
    • Таким образом, example.com/jobs/foo также следует перенаправить на jobs.example.net

Эта последняя часть является самой сложной, так как с Redirect 301 /jobs jobs.example.net путь /foo не пропущен. Таким образом, example.com/jobs/foo перенаправляется на jobs.example.net/foo, который выдает 404 Not Found ошибка, так как эта страница не существует.

Как я могу добиться того, чтобы путь был опущен при перенаправлении?

Author: Esa Jokinen, 2020-04-02

1 answers

Это невозможно с mod_alias Redirect, но с RedirectMatch. Если вы используете регулярное выражение, но оставляете $1 s для для (.*) из URL, он перенаправит на этот точный URL.

RedirectMatch 301 "^/jobs(.*)" "http://jobs.example.net/"

Затем вы, вероятно, найдете много примеров того, как это сделать с помощью mod_rewrite, но вам следует избегать его использования, когда есть альтернатива mod_alias, как указано выше. Для полноты картины, вот mod_rewrite альтернатива:

RewriteEngine on
RewriteRule "^/jobs" "http://jobs.example.net/" [R=301,L]

Оба перенаправят все, начиная с /job, включая /joblessness; не только URL-адреса /job и /job/*. Если вы хотите избежать этого, вы можете поместить правила в раздел <Directory /path/to/jobs>.

 2
Author: Esa Jokinen, 2020-04-13 07:10:20