При запросе локального файла я хотел бы видеть, что перенаправление 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>
.