Переписать URL в поддомен в NGINX - PullRequest
2 голосов
/ 13 февраля 2012

В настоящее время у меня есть изображение, выводимое серверным PHP по URL-адресу, подобному этому:

domain.com / m / image.jpg

Я быхотелось бы, чтобы это изображение можно было просмотреть по URL:

i.domain.com / image.jpg

Возможно ли это в конф. nginx?

Примечание: в настоящее время мой поддомен "i" переназначен в папку / images /.Также в настоящее время я работаю со статическими изображениями, такими как:

http://i.domain.com/simage.jpg (thumb)
http://i.domain.com/image.jpg (medium)
http://i.domain.com/oimage.jpg (full quality)

Вот мой файл domain.conf: http://pastebin.com/BBWUJFxu

Также в nginx.conf у меня есть это для субдомена в настоящее время:

    #setup subdomain i.domain.com
server {
    server_name i.domain.com;
    access_log /var/log/nginx/i.domain.com.access.log;
    error_log /var/log/nginx/i.domain.com.error.log;

    root /var/www/domain.com/html/images;
    index index.php index.html index.htm;

    location / {            
        #change this to a 404 img file .jpg
        try_files $uri $uri/ /notfound.jpg;

        rewrite  "/s([A-Za-z0-9.]+)?" /small/$1 break;
        rewrite  "/o([A-Za-z0-9.]+)?" /orig/$1 break;
        rewrite  "/([A-Za-z0-9.]+)?" /medium/$1 break;

    }

    location = / {
        rewrite ^ http://domain.com permanent;
    }

}

Третье переписывание - это то, которое я собираюсь заменить моим нестатичным обслуживаемым файлом изображения, есть идеи, как это сделать?

1 Ответ

0 голосов
/ 13 февраля 2012

Обновление 2:

Хорошо, поэтому фактические файлы находятся в /images/size/image.jpg, а не /m/, /m/ - это просто каталог psuedo.

Учитывая это, я думаю, это должно быть так просто:

server {
    server_name i.domain.com;
    access_log /var/log/nginx/i.domain.com.access.log;
    error_log /var/log/nginx/i.domain.com.error.log;

    root /var/www/domain.com/html/images;

    location / {            
        rewrite  /s([A-Za-z0-9.]+)? /small/$1 break;
        rewrite  /o([A-Za-z0-9.]+)? /orig/$1 break;
        rewrite  /([A-Za-z0-9.]+)? /medium/$1 break;

        #change this to a 404 img file .jpg
        try_files $uri $uri/ /notfound.jpg;
    }

    location = / {
        rewrite ^ http://domain.com permanent;
    }

}

Но не уверен на 100%.Дайте этому шанс и посмотрите.Я переместил попытку ниже, так как она сначала пыталась найти файлы, которых не существовало, а затем выдавала ошибку.


ОБНОВЛЕНИЕ

СВы пытаетесь просто передать его в сценарий, нам нужно захватить это и передать в сценарий.Я изменил корень, так как вы делаете каталог изображений «psuedo», и нам потребуется доступ к сценарию обработки изображений.

Хорошо, поскольку в середине нет сценария PHP (неправильно прочитанос моей стороны) тогда ниже следует делать то, что вы хотите.

#setup subdomain i.domain.com
server {
    server_name i.domain.com;
    access_log /var/log/nginx/i.domain.com.access.log;
    error_log /var/log/nginx/i.domain.com.error.log;

    root /var/www/domain.com/html;

    location ~* \.jpg {  # add more extensions if you need to
        #change this to a 404 img file .jpg
        try_files $uri $uri/ /m/$uri /m/notfound.jpg;

        #get the main part working first
        #rewrite  "/s([A-Za-z0-9.]+)?" /small/$1 break;
        #rewrite  "/o([A-Za-z0-9.]+)?" /orig/$1 break;
        #rewrite  "/([A-Za-z0-9.]+)?" /medium/$1 break;

    }

    location = / {
        rewrite ^ http://domain.com permanent;
    }

}

Если это сработает, я не уверен, как сделать переписывание для малого / оригинала / носителя (поскольку я не уверен в необходимой логике), но, надеюсь, вы сможете заставить его работать.


В вашем домене conf вам просто нужно добавить местоположение для /m

location /m {
    rewrite ^/m/(.*)$ http://i.domain.com/$1 permanent;
}

Если это будет сделано, до каких-либо мелких ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...