gelraen
13.01.2012 11:21
А как можно сэмулировать RewriteBase в nginx? У меня тут есть поделка на пхп, которая живёт не в корне хоста, а в алиасе, и хочет много разных rewrite. И мне сильно не хочется в каждом rewrite rule держать один и тот же префикс по два раза. Пробовал записать этот префикс в переменную, но не могу сделать чтобы в регексп подставлялось значение этой переменной. Пстач, что делать?
Гугл и вики nginx'а тебе подскажут скрипт, который сделает это за тебя
чочо? в смысле сгенерят простыню из rewrite-правил? нахуй-нахуй
http://wiki.nginx.org/HttpRewriteModule Просветляйся
я сегодня весь день этим просветлялся. Там нету ничего похожего на апачев RewriteBase
Што это?
Пример в студию!
пример чего? ты что несёшь вообще?
Правила RewriteBase, которое ты пытаешься переписать и что оно делает.
>_>
RewriteBase указывает префикс относительно которого применяются все последющие правила RewriteRule. Например ты наговнячил гору правил, которые думают что всё лежит в DocumentRoot, а потом ты передвигаешь всю эту упячку в /govno и дописываешь RewriteBase /govno — и у тебя все работает как и раньше. Вот в чём суть, $username.
Положи все свои рерайты в соответствующий location /govno и будет тебе щастье.
хуй там. надо ещё в регекспе указывать /govno (иначе не матчится, если нужна вся строка запроса) и в replacement string (потому что заменяется вся строка запроса). Короче, ты ты что-то спизданул не подумав.
location /govno/ {
set $re_prefix '/govno/';
rewrite ^$re_prefix(.*)$ /$1;
rewrite ^/blah/hui(.*)$ /hui$1; # /govno/blah/hui → /hui;
# other regexes goes here...
rewrite ^(.*)$ $re_prefix$1;
}
ты сам-то пробовал? переменные в регексп не подставляются
nginx -V мне покажи
% nginx -V
nginx version: nginx/1.0.11
TLS SNI support enabled
configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --with-ld-opt='-L /usr/local/lib' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx-error.log --user=www --group=www --with-ipv6 --with-google_perftools_module -- http-client-body-temp-path=/var/tmp/nginx/client_body_temp -- http-fastcgi-temp-path=/var/tmp/nginx/fastcgi_temp -- http-proxy-temp-path=/var/tmp/nginx/proxy_temp -- http-scgi-temp-path=/var/tmp/nginx/scgi_temp -- http-uwsgi-temp-path=/var/tmp/nginx/uwsgi_temp -- http-log-path=/var/log/nginx-access.log --with- http_addition_module --with- http_dav_module --with- http_flv_module --with- http_perl_module --with- http_realip_module --with- http_ssl_module --with- http_stub_status_module --with- http_sub_module --with-pcre --add-module=/tmp/usr/ports/www/nginx/work/passenger-3.0.11/ext/nginx
Хм...
Замени в двух местах $re_prefix на /govno/ :3
тогда, конечно, работает, да. но это ровно то, чего я хотел избежать
В чём проблема написать в начале и конце списка по рерайту?
в смысле сначала убрать префикс, а потом вернуть его взад? пиздец, до такого хуёвого решения я даже не додумался >_<
а, да, как мне в таком случае делать rewrite .... last; ?
Не делай :3
>_<
говно ваш nginx, вот.
Не пишите говнорерайты и всё будет ок.