Basia

мой бложек

 
  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

rewrite модуль для apache и nginx

Удивительная вещь этот модуль. Нагляднее всего он в Apache, но есть еще и nginx, который набираете популярность. Ну чего там, в Апач? Все просто, подключил модуль, отключил модуль и все. Однако все не так оказалось с ним просто. А началось все с того, что одним из решений небольшой проблемки было наладить rewrite на вэбсервере nginx. Ну сначала конечно полезла на официальный сайт Игоря Сысоева, разработчика nginx. Но, без обид, там все очень кратко написано, не для обывателя… Кстати вот сайт Игоря

http://sysoev.ru/nginx/docs/ , где можно почитать не только о nginx, но и о других вещах. В общем проблему то свою я решила, rewrite на nginx заработал. Делюсь информацией.

Конечно стоит сначала ознакомиться с информацией от разработчика, тут более подробно http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html . Из всего этого меня интересовала вот эта часть http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#rewrite

Из всего этого следует, что можно использовать в конф фале в разделе server для всего вирт. сервера, location только для данного раздела и в рамках условия if . Список флагов завершающих директиву rewrite:

    * last — завершает обработку текущего набора директив ngx_http_rewrite_module, после чего ищется соответствие URI и location;

    * break — завершает обработку текущего набора директив ngx_http_rewrite_module;

    * redirect — возвращает временный редирект с кодом 302; используется, если заменяющая строка не начинается с "http://";

    * permanent — возвращает постоянный редирект с кодом 301.

И небольшой комментарий: Если же эти директивы поместить в location /download/, то нужно заменить флаг last на break, иначе nginx сделает 10 циклов и вернёт ошибку 500.

В принципе все эти варианты мне подходили, мне нужно было чтоб рерайтились адреса графических объектов, либо в локейшн, либо с помощью условия if, но можно и сразу все адреса, значит используя раздел server.

В общем поискав, нашла вот такую статью http://drupal.org/node/110224 . Там меня заинтересовал вот этот код:

See also:

handelaar - February 2, 2007 - 00:17

Right under this page on a Google query for nginx rewrite examples, Scott Yang draws my attention to the part of the nginx docs which I couldn't see staring me in the face.

Where Apache uses !-f then !-d in sequence, I was looking for a way to ape it. Turns out I didn't need to. So above where I wrote this:

            if (!-f $request_filename) {

                rewrite  ^(.*)$  /index.php?q=$1  last;

                break;

            }

            if (!-d $request_filename) {

                rewrite  ^(.*)$  /index.php?q=$1  last;

                break;

            }

...you should instead use this...

            if (!-e $request_filename) {

                rewrite  ^(.*)$  /index.php?q=$1  last;

                break;

            }

...because Nginx has the "-e" directive which matches against a file, directory or symlink all at once, rendering my attempts to replicate the Apache way unnecessary.

Такой же совет я нашла и тут http://brainstorm.name/drupal-and-nginx-rewrites

Итак, проверила на себе, оно работает!

Код в студию:

location / {

root /var/www/brainstorm/htdocs;

      index index.php index.html index.htm;

      if (!-e $request_filename ) {

rewrite ^(.*)$ /index.php?q=$1;

       }

 }

Вставляем этот кусочек в nginx.conf , останавливаем и запускаем сервис. Модуль rewrite будет работать для всего вирт. сервера.

В процессе решения этой задачи, углубилась в изучение собственно модуля rewrite и для apache тоже. Очень интересно, но не все так просто. Мир вдруг переворачивается и оказалось, что земля круглая и не центр вселенной. Вот собственно очень хороший источник http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html

В apache2 этот модуль по умолчанию не запущен, но есть в каталоге /etc/apache2/mods-available . Подгружаемые модули перечислены в конф файле apache2.conf  , которые находятся в каталоге mods-enabled . Включается модуль строчкой

RewriteEngine on

Она может находиться в конфигурационном файле виртуального сервера и применяться ко всему вирт. серверу.  Или в файле .htaccess, тогда модуль применяется для каталога, в котором данный файл находится. Это вкратце.

 

Баннер