Назад | Перейти на главную страницу

Как я могу перенаправить запросы к определенным файлам на страницы, размещенные на других серверах?

При запросе локального файла я хотел бы видеть, что перенаправление 301 должно вести на страницу на другом сервере (предоставляется URL-адрес). Обычно это можно сделать с помощью простого Redirect директиву, но в моем случае это вызовет некоторую головную боль при обслуживании: она не поддерживает перенаправление файлов (с учетом их имен) в определенные каталоги, которые могут часто меняться. Для меня наилучшей ситуацией было бы использование чего-то похожего на символические ссылки с дополнительной поддержкой «связывания» с URL-адресами за пределами хоста. Кроме того, с Options +Indexes, этот файл "перенаправления" также может быть указан.

Добавьте это в .htaccess файл:

RewriteEngine On

# Makes Apache redirect only if the target file doesn't exist on this server
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^assets/(.*)$ http://your-file-storage.com/$1 [R=301,L]

Эта конфигурация делает все запросы к http://your-app.com/assets/* быть перенаправленным на http://your-file-storage.com/*. Например, URL http://your-app.com/assets/foo/bar.txt будет перенаправлен на http://your-file-storage.com/foo/bar.txt.

В ^assets/(.*)$ строка - это регулярное выражение, которое проверяет URL-адреса. Если URL-адрес соответствует регулярному выражению, он перенаправляется.

В http://your-file-storage.com/$1 строка - это цель перенаправления. В $1 заменяется содержимым круглых скобок регулярного выражения.

Если вам нужно много правил перенаправления, добавьте много RewriteRule директивы к .htaccess файл:

RewriteEngine On
RewriteRule ^assets1/(.*)$ http://your-file-storage1.com/$1 [R=301,L]
RewriteRule ^assets2/(.*)$ http://your-file-storage2.com/$1 [R=301,L]

В качестве альтернативы вы можете добавить RedirectMatch директива конфигурации виртуального хоста в файле конфигурации Apache:

RedirectMatch permanent ^/assets/(.*)$ http://your-file-storage.com/$1

Работает так же.

Это может помочь: RedirectMatch 301 .*/<filename> <redirect target>.

Подстановочный знак .* сообщает Apache, что нужно сопоставить что-либо до фактического имени файла, поэтому часто меняющиеся каталоги не будут проблемой.

Если вам нужно сопоставить определенные имена каталогов и у вас есть их конечный список, вы можете перечислить их все в одном правиле: RedirectMatch 301 .*/(dir1|dir2|dir3|...)/<filename <redirect target>.