Re[2]: Как правильно задать SCRIPT_URL ?

Vitaly Puzrin vitaly at rcdesign.ru
Thu Aug 9 17:20:49 MSD 2007


>> >> >> Проапдейтил php-скрипты, и оказалось что они захотели переменную
>> >> >> SCRIPT_URL, думая, что стоят на апаче с mod_rewrite.
>> >> >> 
>> >> >> Подскажите пожалуйста, как эту переменную правильно задать из
>> >> >> подручных средств.
>> >> 
>> >> IS> Судя по тому, что написано в конце
>> >> IS> http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
>> >> IS> для этого подойдёт $uri, если оно не менялось rewrite'ом.
>> >> 
>> >> Игорь, в том и проблема, оно меняется реврайтом :(
>> >> 
>> >> И по-моему, в uri все равно содержится имя файла, а если я правильно
>> >> понял, то SERVER_URL - именно путь к директории (со слешом на конце),
>> >> без файла (если был) и хоста.
>> >> 
>> >> Очень внимательно копался в документации, так и не смог найти чего-то
>> >> похожего. Никак не ожидал подобной плюхи от EZ Publish. Хоть
>> >> назад откатывайся.
>> >> 
>> >> Может добавить такую переменную в список ngx_http_core_module?
>> 
>> IS> Насколько я понимаю, это SCRIPT_URL - это оригинальный URI:
>> 
>> IS>          set  $script_url   $uri;
>> IS>          any rewrites
>> 
>> Игорь, посмотрите пожалуйста пример из документации по SCRIPT_URL, там
>> нет имени файла, только путь. Я смотрел по php-скриптам - они тоже без имени
>> файла хотят.

IS> В примере после rewrite может быть всё, а вот, что они пишут в пояснении:

IS> Notice: These variables hold the URI/URL as they were initially requested,
IS> i.e., before any rewriting. This is important because the rewriting
IS> process is primarily used to rewrite logical URLs to physical pathnames.

IS> Кроме того, в исходниках SCRIPT_URL выставляется в полный r->uri:

IS>          if (var == NULL) {
IS>              ap_table_setn(r->subprocess_env, ENVVAR_SCRIPT_URL, r->uri);
IS>          }

>> set сделать можно, но как с конца имя файла до слеша откусить?

IS>       set  $script_url   $uri;
IS>       if ($uri ~ ^(.+/)[^/]+$) {
IS>           set  $script_url   $1;
IS>       }

set  $script_url   $uri;

оказалось то что нужно. Игорь, большое спасибо за помощь.







More information about the nginx-ru mailing list