Вы можете использовать следующее регулярное выражение для проверки допустимости файла.
/\.(jpe*g|png)$/gi
И затем вы можете использовать метод test()
, чтобы проверить, является ли файл действительным в вашем операторе if.
if(/\.(jpe?g|png)$/gi.test(s)) {
//TODO
}
Чем далее цепочка можно сделать это, тем лучше.
Идеально, сделайте это на уровне DNS при помощи другого домена для Ваших изображений (например, imgs.example.com)
Если можно предоставить его, заставить кого-то еще делать это при помощи CDN (Сеть доставки контента).
- Обновление -
Существует также 2 функции mod_rewrite апача, на который Вы могли бы хотеть посмотреть. Они все описаны хорошо по http://httpd.apache.org/docs/1.3/misc/rewriteguide.html.
Первое находится под направляющимся "Динамическим Miror" в вышеупомянутом документе, который использует mod_rewrite флаг Proxy [p]. Это позволяет Вашему серверу тихо выбрать файлы от другого домена и возвратить их.
Второе должно просто перенаправить запрос к новому домену. Эта вторая опция помещает меньше деформации на Ваш сервер, но запрашивает все еще потребность войти, и это замедляет заключительный рендеринг страницы, поскольку каждый запрос должен выполнить чрезвычайно избыточный запрос к Вашему серверу сначала.
я соглашаюсь с rikh. Если Вы хотите, чтобы изображения были вручены от другого веб-сервера, то служите им на другом веб-сервере. Например:
<IMG src="images/Brett.jpg">
становится
<IMG src="http://brettnesbitt.akamia-technologies.com/images/Brett.jpg">
Любой вид подсистемы балансировки нагрузки все еще подаст изображение от канала веб-сервера, который является тем, чего Вы стараетесь избегать.
я, конечно, знаю то, что Вы действительно хотите. То, что Вы действительно хотите, для любого запроса как:
GET images/Brett.jpg HTTP/1.1
автоматически быть преобразованным в:
HTTP/1.1 307 Temporary Redirect
Location: http://brettnesbitt.akamia-technologies.com/images/Brett.jpg
этим путем Вы не должны делать никакой работы, кроме копии изображения к другому веб-серверу.
То, что я действительно не знаю, как сделать.
При помощи фразы "NAT" это подразумевает, что брандмауэр/маршрутизатор получает Запросы HTTP, и Вы хотите передать запрос к другому внутреннему серверу, если Запрос HTTP был для файлов изображений.
Это затем вызывает вопрос о том, что Вы на самом деле пытаетесь сохранить. Неважно, какой внутренний веб-сервер обслуживает Запрос HTTP, данные все еще оказываются перед необходимостью течь через канал брандмауэра/маршрутизатора.
Причина я поднимаю его, состоит в том, потому что общий сценарий, когда кто-то хочет вручить изображения с другого сервера, - то, потому что они хотят разделить широкую полосу пропускания, главным образом статичную, содержание стоимости низкого ЦП от их фактической логики.
Только использование NAT, чтобы переписать пакет и отправить его на другой сервер не будет работать для той распространенной проблемы.
Другая причина могла бы состоять в том, потому что изображения не являются статическим содержанием в Вашей системе и запросом к
GET images/Brett.jpg HTTP/1.1
на самом деле создает изображение на лету, со стоимостью высокого ЦП, или только использующий с доступными данными (т.е. база данных SQL Server) к ServerB.
Если это верно, затем я все еще использовал бы другое имя сервера по запросу изображения:
GET http://www.brettsoft.com/default.aspx HTTP/1.1
GET http://imageserver.brettsoft.com/images/Brett.jpg HTTP/1.1
я понимаю то, что Вы надеетесь на с контролем сетевого пакета переопределить правило NAT и отправить ему на другой сервер - я никогда не видел никакую подобную вещь, которая может сделать это.
Это звучит как больше "выхода прокси", где веб-прокси делает это. (т.е. pfSense и m0n0wall не могут сделать этого),
Который затем приводит к своего рода решению, мы использовали однажды: пользовательский веб-сервер, который анализирует запрос, выполняет соответствующий запрос от некоторого внутреннего сервера, и двоичный файл пишет ответ клиенту.
На той боли в решении для задницы настоял "консультант по безопасности", который, по-видимому, верит в безопасность через мрак.
я знаю, что IIS не может сделать таких вещей для Вас сам - я не знаю о других продуктах веб-сервера.
я просто расспросил тут и там, и по-видимому если бы Вы хотели записать пользовательский модуль ядра для Вас основанный на Linux маршрутизатор, то у Вас мог бы быть он, осматривают пакеты и принимают соответствующие меры. Такой модуль мог бы существовать. Существует, по-видимому, много других открыто полученных модулей для использования в качестве начальной точки.
Но я выстрелил бы мне в голову.