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

Мод перезаписывает все недостающие изображения на поддоменах

Я настраиваю сервер разработки, поэтому мне больше не нужно напрямую редактировать файлы на удаленных серверах и иметь SVN для управления версиями.

Поскольку на некоторых сайтах очень много изображений (3-30 ГБ), мы решили не включать изображения в репозитории SVN.

Итак, я создал систему, которая дает всем поддоменам их собственный виртуальный корень документа, поэтому http://[user].[domain].testdomain.com получает корень виртуального документа из /working/[user]/[domain]/httpdocs это рабочие копии всех пользователей.
(Не знаю, актуально ли это, но может быть полезно)

Однако для полноценного тестирования было бы полезно отображать изображения. Сервер разработки также выполняет функции резервного сервера, поэтому все образы находятся на сервере. И я хотел бы отображать все отсутствующие изображения с помощью изящной комбинации скриптов htaccess / php.

В настоящее время я использую эти правила:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule (.*) http://testdomain.com/fallback.php?image=$1 [L]

Но это не работает точно так, как планировалось, так как я не могу получить от него информацию о поддомене. Кроме того, поскольку URL-адрес перенаправления содержит полный домен, он полностью перенаправляется, что делает его дополнительным HTTP-запросом.

Идеальной настройкой было бы, чтобы все отсутствующие изображения обслуживались одним скриптом PHP, расположенным по адресу http://testdomain.com/fallback.php и что изображения обслуживаются с исходного URL-адреса (например, http://me.webshop.testdomain.com/images/header.png), но я не могу заставить его работать.

Это вообще возможно? Если да, то какие указания на то, что мне делать?

p.s. В качестве бонуса приведенные выше правила, похоже, срабатывают при каждом запросе изображения на двойном поддомене (user.webshop.testdomain.com) но он работает так, как должен webshop.testdomain.com, это почему?

//редактировать:
Это решило мои проблемы:

RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.domain\.nl [NC]
RewriteCond /working/%1/%2/httpdocs%{REQUEST_URI} !-F
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule (.*) http://domain.nl/fallbackimages/fallback.php?image=$1&host=%{HTTP_REFERER}&oeps=%{HTTP_HOST} [P]

Если вам нужен доступ к поддомену (я предполагаю, что он будет использоваться в файле PHP), вы можете попробовать следующее:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteCond %{HTTP_HOST} ([^\.]*)\.([^\.]*)\.testdomain\.com$
RewriteRule (.*) http://testdomain.com/fallback.php?image=$1&user=%1&subdomain=%2 [P]

Я изменил [L] флаг к [P], который будет проксировать запрос, а не перенаправлять его. Это требует mod_proxy быть включенным. В %1 и %2 разрешить доступ к группам регулярных выражений из предыдущего RewriteCond

Кроме того, я не уверен, почему ваш RewriteRule срабатывает при каждом запросе с двумя поддоменами, чего не должно быть. Вы можете включить журнал перезаписи и посмотреть, с чем он соответствует.

Надеюсь это поможет.