Nginx rewrite for Maxsite CMS

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Nginx rewrite for Maxsite CMS

Непрочитанное сообщение Dmitriy_K » 2010-08-31 21:31:40

Завяз с написанием реврайтов для CMS Maxsite.
Там даны только примеры реврайтов для apache (.htaccess), и то весьма невнятно:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^(.*)$ /index.php?/$1 [L,QSA]
</IfModule>

На некотрых серверах вместо строчки:
RewriteRule . /index.php [L]
можно попробовать указать:
RewriteRule ^(.*)$ /index.php?/$1 [L,QSA]

Вариант для Nginx с апачем в качестве надстройки:
RewriteRule ^(.*)$ /index.php?$1 [L,QSA]
Понимай как хочешь... :(
Через поиск никакого рабочего варианта реврайтов найти не удалось.

Пробовал прописать в конфиге nginx (он у меня без бэкенда) вариации типа:

Код: Выделить всё

    server {
        listen 80;
        server_name net.open.ru net;

        location / {
            root /site/maxsite;
            index index.php;

            if ($query_string = !^(index\.php|uploads|robots\.txt|favicon\.ico)) {
                rewrite ^/(.*)$ /index.php?$1 last;
                break;
            }

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


#            if ($request_uri ~* ^.*/.*$) {
#                rewrite ^/(\w*)/(.*)$ /$1/index.php?q=$2 last;
#                break;
#            }
        }

        location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico)$ {
                root /site/maxsite;
                #access_log off;
                break;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /site/maxsite$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
При попытке нажать клавишу первой страницы CMS "Установить" не происходит корректная передача параметров другой странице. В результате, выдаётся пустое окно, хотя в лог пишется "200". Также некорректно обрабатываются несуществующие URL. Выдаётся ошибка типа:

Код: Выделить всё

Table 'maxsite.mso_page' doesn't exist
SELECT `page_id` FROM (`mso_page`) WHERE `page_slug` = 'beliberda' OR `page_id` = 'beliberda' LIMIT 1
К сожалению, в логах информации как обрабатывались реврайты нет, даже при установке уровня подробностей "info".

Буду очень благодарен за помощь в устранении ошибки в правилах реврайтов. :oops:
Последний раз редактировалось f_andrey 2010-08-31 21:48:17, всего редактировалось 1 раз.
Причина: Автору, выбирайте пожалуйста раздел соответствуюший тематике вашего сообщения.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: Nginx rewrite for Maxsite CMS

Непрочитанное сообщение Dmitriy_K » 2010-09-01 13:02:17

В предыдущем посте были приведены явно лишние строки с разными вариантами попыток написания реврайтов. Прошу извинить.
В сущности, было бы достаточно разобраться почему не отрабатывает правильно реврайт:

Код: Выделить всё

            if ($query_string != ^(index\.php|uploads|robots\.txt|favicon\.ico)) {
                rewrite ^/(.*)$ /index.php?$1 last;
            }
Например, вместо выдачи robots.txt или перехода в uploads получаю:

Код: Выделить всё

Error Number: 1146
Table 'maxsite.mso_page' doesn't exist
SELECT `page_id` FROM (`mso_page`) WHERE `page_slug` = 'robots_txt' OR `page_id` = 'robots_txt' LIMIT 1
и
SELECT `page_id` FROM (`mso_page`) WHERE `page_slug` = 'install-ru_txt' OR `page_id` = 'install-ru_txt' LIMIT 1
При попытке перехода по ссылке на несуществующий файл http://site.ru/application/views/install/index.php выдаётся ошибка 403 вместо перехода на главный индекс.
При попытке перехода по ссылке на скрипт http://site.ru/application/views/index.php, который не должен быть доступен, выдаётся страница со строкой:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
При попытке перехода по ссылке на текстовый файл http://site.ru/install-ru.txt, который должен быть недоступен, выдаётся:
SELECT `page_id` FROM (`mso_page`) WHERE `page_slug` = 'install-ru_txt' OR `page_id` = 'install-ru_txt' LIMIT 1

Выдача пустой страницы установки базы движка CMS при нажатии "Установить" с главной индексной страницы - тоже, конечно, трабл.
Там получается попытка реврайта на несуществующую страницу: http://site.ru/install/2
Этот адрес появляется в аресной строке, в лог пишется "200". Передачи параметров скрипту, похоже, не происходит.

Конфиг, в целом, получается такой:

Код: Выделить всё

        location / {
            root /site/maxsite;
            index index.php;

            if ($query_string != ^(index\.php|uploads|robots\.txt|favicon\.ico)) {
                rewrite ^/(.*)$ /index.php?$1 last;
            }
        }

        location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico)$ {
                root /site/maxsite;
                #access_log off;
                break;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /site/maxsite$fastcgi_script_name;
            include        fastcgi_params;
        }

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Nginx rewrite for Maxsite CMS

Непрочитанное сообщение hizel » 2010-09-01 13:34:56

Код: Выделить всё

if ($1 !~ "^(index\.php|uploads|robots\.txt|favicon\.ico)"){
	set $rule_0 1$rule_0;
}
if (!-f $request_filename){
	set $rule_0 2$rule_0;
}
if (!-d $request_filename){
	set $rule_0 3$rule_0;
}
if ($rule_0 = "321"){
	rewrite /. /index.php last;
}
	rewrite ^/(.*)$ /index.php?/$1 last;
сам шоке :-)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Dmitriy_K
сержант
Сообщения: 200
Зарегистрирован: 2009-04-07 6:22:33
Откуда: г.Королёв

Re: Nginx rewrite for Maxsite CMS

Непрочитанное сообщение Dmitriy_K » 2010-09-01 16:44:26

Да, наворот получается, хотя можно подсократить за счёт установки условия if (!-e $request_filename).
К сожалению, не работает. Из изменений только то, что при нажатии "Установить" с главной индексной страницы стал происходить возврат на неё. Остальное осталось так же.
Ещё ссылка http://site.ru/robots.txt стала выдавать SELECT `page_id` FROM (`mso_page`) WHERE `page_slug` = 'robots_txt' OR `page_id` = 'robots_txt' LIMIT 1
а ссылка http://site.ru/application/views/install/index.php - ошибку "404".

Кстати, в первой строке должно быть if ($query_string..., иначе ошибка:
nginx -t
[emerg]: unknown "1" variable
configuration file /usr/local/etc/nginx/nginx.conf test failed
сам шоке :-)
Сам Сысоев в шоке. :crazy: