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

правило перезаписи nginx

У меня следующее правило mod_rewrite

RewriteCond %{HTTP_HOST} !^(host)\.doamin\.com [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com [NC]
RewriteRule ^(.*) /magento/$1 [L]

Мне это нужно для работы в nginx, и я бился головой о стену, чтобы заставить его работать

Спасибо!

ОБНОВИТЬ!

Вот лучшее объяснение того, что я пытаюсь сделать

 store1.domain.com
 store2.domain.com

поэтому пользователь может перейти на store1.domain.com/products/, и URL-адрес останется там

Мы делаем это в apache как

RewriteCond %{HTTP_HOST} !^(host)\.domain\.com [NC]
RewriteCond %{HTTP_HOST} !^(www)\.domain\.com [NC]
RewriteRule ^(.*) /magento/$1 [L]

У нас также есть DNS catchall, который отправит все * .domain.com на apache vhost по умолчанию. Я бьюсь головой о стену, чтобы заставить его работать в nginx, чтобы имя хоста оставалось неизменным, но за кулисами переписываю домен для анализа magento.

Вот что у меня есть, но он просто продолжает добавлять / magento / magento / magento в конец, пока не убьет цикл

    if ($http_host !~ "^www.domain\.com$") {
        rewrite ^.+ http://$http_host/magento/$uri last;
        break;
    }

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

store1.domain.com/magento/
store1.domain.com/magento/magento/
store1.domain.com/magento/magento/magento/ and so on

Вот журнал ошибок для него

2009/11/03 15:40:26 [error] 22347#0: *2 rewrite or internal redirection cycle while processing "/magento//magento//magento//magento//magento//magento//magento//magento//magento//magento//magento//catalogsearch/advanced/result/", client: 127.0.0.1, server: laptop, request: "GET /catalogsearch/advanced/result/?featured=1 HTTP/1.1", host: "store1.domain.com"

Попробуйте что-то вроде этого:

server
{
    listen 80;
    server_name *.domain.com ;
    rewrite ^.+ httр://$host/magento/$uri last;
    break;
}

UPD:
Вы также можете исключить имена хостов и уже выполненные перенаправления через location + if + regex внутри server {} раздел

location !~ \/magento\/
{
    if ($host !~ "^(www|host)\.domain\.com$")
    {
    // Here goes your rewrite
    }
}

PS. Я думаю, что это можно было бы сделать более сексуально, используя 2 server {} блоков, но мне лень сейчас об этом думать =)