Tuesday, February 01, 2011

lighttpd: url.redirect и url.rewrite-once

Сначала Rewrite, потом Redirect!

Не знаю почему, но я все время путаю, в каком порядке работают эти директивы, результаты работы какой из них пользователю видны, а какой нет... Итак:
url.rewrite-once обрабатывает урлы в пределах веб-сервера (более того, в пределах хоста, так как переписывается относительный путь).
Затем url.redirect делает редирект, а то вдруг редирект внешний.


$HTTP["host"] =~ "^www\.example\.com$" {
    url.redirect = (
        "^/(.*)" => "http://example.com/$1"
    )
}

$HTTP["host"] =~ "^example\.com$" {
    url.rewrite-once = (
        "^/action/(\w+)$" => "/foo.php?action=$1",
        "^/foo/(\w+)$" => "/poo.php"
    )

    url.redirect = (
        "^/poo\.php(.*)" => "http://poo.example.com/"
    )

}

Запросы на www.example.com будут редиректиться на example.com, но эта не та часть, которая нас интересует. Далее запросы будут преобразовываться внутри хоста example.com (прозрачно для пользователя, текст в адресной строке останется неизменным): запрос /action/pee будет преобразован в foo.php?action=pee и на этом все остановится, а /foo/kungfoo - в /poo.php.
И только после этого для /foo/kungfoo, преобразованного в /poo.php, будет сделан редирект на http://poo.example.com/. И именно http://poo.example.com/ пользователь увидит в адресной строке.

Labels:

0 Comments:

Post a Comment

<< Home