Логотип   Простое и понятное управление
  Уникальные возможности по настройке
  Open Server скачали уже 1 020 090 раз!

Форум

Добро пожаловать, Гость!

[nginx] Как применить rewrite правило для всех доменов?

Обсуждение общих вопросов связанных с программой
didar_uranov
Сообщения: 10
C нами: 4 года 3 мес

Непрочитанное сообщение didar_uranov » 13 авг 2012, 20:31

в контексте server{} для каждого домена в папке domains в файле настроек, который генерируется при запуске userdata\temp\config\nginx.conf, мне нужно чтобы прописывалось такое вот правило:

if (!-e $request_filename) {
         rewrite ^(.*)$ /index.php?route=$1 last;
      }


пробовал добавлять в файл userdata\config\Nginx-1.2.2_url.txt
но т.о сервер не запускается вообще и в логах nginx-xxx.log ничего нет

подскажите как это сделать

Аватара пользователя
Максим
Сообщения: 4874
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 13 авг 2012, 20:56

А что тут думать, нажмите Меню - Дополнительно - Конфигурация - Nginx, и вставляйте своё правило в шаблон хоста для корневого location. В чём проблема с этим?

didar_uranov
Сообщения: 10
C нами: 4 года 3 мес

Непрочитанное сообщение didar_uranov » 13 авг 2012, 21:30

добавлял в server {} и в корневой location {}
# Первичный виртуальный хост "по умолчанию"


более полный конфиг:
пробовал в контексте server {}
server {
    listen %ip%:%httpport% default;
    location / {
      root   %sprogdir%/modules/system/html/openserver/default;
      index  index.html;
    
   
    }
     if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?route=$1 last;
   }
}


пробовал в контексте server { location / {} }
server {
    listen %ip%:%httpport% default;
    location / {
      root   %sprogdir%/modules/system/html/openserver/default;
      index  index.html;
    
     if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?route=$1 last;
   }
    }
   
}


open-server запустился, но rewrite правило не работает

Добавлено спустя 11 минут 43 секунды:
тот же rewrite только для апача:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]


единственно в каждом домене нужно создавать .htaccess файл с этими правилами
и на продакшне стоит nginx, так что нужно чтобы правило для Nginx работало для доменов

Аватара пользователя
Максим
Сообщения: 4874
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 13 авг 2012, 21:54

Зачем пишете "last;", уберите, окончание такое ";" должно быть. Тогда наверное и заработает ваше правило.

didar_uranov
Сообщения: 10
C нами: 4 года 3 мес

Непрочитанное сообщение didar_uranov » 14 авг 2012, 05:34

"last;" тут не при чем. на продакшн сервере это реврайт правило работает как часы

Аватара пользователя
Максим
Сообщения: 4874
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 14 авг 2012, 05:51

Ну я не знаю что вам не нравится, правило то работает. Предположу что вам еще нужно чтобы и ненайденные .php тоже в index.php отправлясь, тогда помимо корневого location поместите правило в секцию fastcgi вместо записи try_files $uri =404;

У мены вышло так(последняя версия OS)
#---------------------------------------------#
# Внимание!                                   #
# При редактировании конфигурации хоста       #
# нельзя удалять или заменять системные       #
# переменные %...%, вы можете вносить только  #
# новые записи дополняющие конфигурацию.      #
#---------------------------------------------#

#---------------------------------------------#
# Начало блока конфигурации HTTP хоста        #
#---------------------------------------------#
server {
listen %ip%:%httpport%;
server_name %host% %aliases%;
location ~ /\. {deny all;}

location / {
    root   "%hostdir%";
    index  index.php index.html index.htm;
    if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?route=$1 last;
   }
}

location ~ \.php$ {
    root           "%hostdir%";
    if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?route=$1 last;
    }
    # if (!-e $document_root$document_uri){return 404;}   
    fastcgi_pass   backend;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param  TMP    "%sprogdir%/userdata/temp";
    fastcgi_param  TMPDIR "%sprogdir%/userdata/temp";
    fastcgi_param  TEMP   "%sprogdir%/userdata/temp";
    fastcgi_connect_timeout 1s;
    fastcgi_next_upstream timeout;
    fastcgi_send_timeout 30s;
    fastcgi_read_timeout 30s;
    fastcgi_buffers 6 64k;
    fastcgi_ignore_client_abort off;
    #fastcgi_intercept_errors on;
    fastcgi_param QUERY_STRING       $query_string;
    fastcgi_param REQUEST_METHOD     $request_method;
    fastcgi_param CONTENT_TYPE       $content_type;
    fastcgi_param CONTENT_LENGTH     $content_length;
    fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param SERVER_SOFTWARE    nginx;
    fastcgi_param SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param REQUEST_URI        $request_uri;
    fastcgi_param DOCUMENT_URI       $document_uri;
    fastcgi_param DOCUMENT_ROOT      $document_root;
    fastcgi_param SERVER_PROTOCOL    $server_protocol;
    fastcgi_param REMOTE_ADDR        $remote_addr;
    fastcgi_param REMOTE_PORT        $remote_port;
    fastcgi_param SERVER_ADDR        $server_addr;
    fastcgi_param SERVER_PORT        $server_port;
    fastcgi_param SERVER_NAME        $host;
}

# Не удаляйте следующую строку конфигурации!
include "%sprogdir%/userdata/temp/config/%httpdriver%_url.conf";
}
#---------------------------------------------#
# Конец блока конфигурации HTTP хоста         #
#---------------------------------------------#




#---------------------------------------------#
# Начало блока конфигурации HTTPS хоста       #
#---------------------------------------------#
server {
listen %ip%:%httpsport%;
server_name %host% %aliases%;

ssl on;

location ~ /\. {deny all;}

location / {
    root   "%hostdir%";
    index  index.php index.html index.htm;
    if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?route=$1 last;
    }
}

location ~ \.php$ {   
    root           "%hostdir%";
    if (!-e $request_filename) {
      rewrite ^(.*)$ /index.php?route=$1 last;
    }
    # if (!-e $document_root$document_uri){return 404;}   
    fastcgi_pass   backend;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param  TMP    "%sprogdir%/userdata/temp";
    fastcgi_param  TMPDIR "%sprogdir%/userdata/temp";
    fastcgi_param  TEMP   "%sprogdir%/userdata/temp";
    fastcgi_connect_timeout 1s;
    fastcgi_next_upstream timeout;
    fastcgi_send_timeout 30s;
    fastcgi_read_timeout 30s;
    fastcgi_buffers 6 64k;
    fastcgi_ignore_client_abort off;
    #fastcgi_intercept_errors on;
    fastcgi_param QUERY_STRING       $query_string;
    fastcgi_param REQUEST_METHOD     $request_method;
    fastcgi_param CONTENT_TYPE       $content_type;
    fastcgi_param CONTENT_LENGTH     $content_length;
    fastcgi_param GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param SERVER_SOFTWARE    nginx;
    fastcgi_param SCRIPT_NAME        $fastcgi_script_name;
    fastcgi_param REQUEST_URI        $request_uri;
    fastcgi_param DOCUMENT_URI       $document_uri;
    fastcgi_param DOCUMENT_ROOT      $document_root;
    fastcgi_param SERVER_PROTOCOL    $server_protocol;
    fastcgi_param REMOTE_ADDR        $remote_addr;
    fastcgi_param REMOTE_PORT        $remote_port;
    fastcgi_param SERVER_ADDR        $server_addr;
    fastcgi_param SERVER_PORT        $server_port;
    fastcgi_param SERVER_NAME        $host;
}

# Не удаляйте следующую строку конфигурации!
include "%sprogdir%/userdata/temp/config/%httpdriver%_url.conf";
}
#---------------------------------------------#
# Конец блока конфигурации HTTPS хоста        #
#---------------------------------------------#

didar_uranov
Сообщения: 10
C нами: 4 года 3 мес

Непрочитанное сообщение didar_uranov » 15 авг 2012, 06:16

привет, Максим. не сработало.

Повторюсь. Мне нужно чтобы в конечном сгенерированном конфиге для nginx, который находится в userdata/temp/config/nginx.conf мое правило находилось в каждом виртуальном хосте в контексте server{}

еще лучше, если бы можно было выбирать какому домену прописывать правило, а какому нет

Аватара пользователя
Максим
Сообщения: 4874
C нами: 5 лет 11 мес
Контакты:

Непрочитанное сообщение Максим » 15 авг 2012, 14:58

Что значит не сработало? Я вам дал абсолютно рабочие правила. В контексте server они не прописываются, такие правила прописываются в location. Ну а как создавать правила для отдельно взятого домена написано в справке.

didar_uranov
Сообщения: 10
C нами: 4 года 3 мес

Непрочитанное сообщение didar_uranov » 19 авг 2012, 07:50

Максим, не работают.
Как вы уже догодались это правило для ЧПУрл.
т.е. http://test.com/page/2
преобразуется в http://test.com/?route=page/2

Правила можно писать в контекст server{} http://wiki.nginx.org/NginxHttpRewriteModule#if
И как я уже писал прекрасно работает на продакшн сервере.


Вернуться в «Обсуждение Open Server»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя