Перенаправление 404 на внешний домен с сохранением URI с использованием .htaccess

Потратил некоторое время на это и много искал. Нашел вопросы и ответы, которые почти охватывали то, что мне нужно, но не совсем...

В двух словах: попытка перенаправить пользователя на внешний домен, когда он получает ошибку 404, с сохранением URI, используя только .htaccess.

Соображения:

  • Apache не знает о файлах на сервере, он динамически запрашивает их из CMS.
  • Запрошенный URI может содержать необычные символы, например. ";" "="
  • Необходимо избегать каких-либо сценариев на стороне сервера (например, php).

Требуемое поведение:

  • Пользователь запрашивает URL
  • Сервер отвечает 404
  • Пользователь прозрачно перенаправляется на внешний домен с сохранением URI

Пример 1:

  • Запросы пользователей: www.example.com/no/Page
  • Сервер отвечает 404
  • Пользователь перенаправляется на: www.newdomain.com/no/Page

Пример 2:

  • Запросы пользователей: www.example.com/url;=xyz
  • Сервер отвечает 404
  • Пользователь перенаправляется на: www.newdomain.com/url;=xyz

Можно ли это реализовать только с помощью .htaccess?

Попытка что-то вроде строк:

RewriteEngine On

ErrorDocument 404 /404.html?u=/the/Requested/URI

RewriteCond %{REQUEST_URI} ^/404.html [NC]
RewriteCond %{QUERY_STRING} ^u=(.*)
RewriteRule (.*) http://www.newdomain.com%1? [NC,NE,L,R=301,E=nocache:1]

В основном это работает, но только с жестко запрограммированной строкой запроса... нельзя включить ее динамически.

Любые идеи, как добиться этого (если вообще)?


person livepixel    schedule 26.05.2016    source источник


Ответы (1)


Это можно сделать с помощью ErrorDocument, например.

ErrorDocument 404 http://www.newdomain.com%{REQUEST_URI}

К сожалению, это работает только с Apache >= 2.4.13.

Начиная с версии 2.4.13, внутри директивы можно использовать синтаксис выражения для создания динамических строк и URL-адресов.

person Olaf Dietsche    schedule 26.05.2016