Не работают страницы кроме index.php

Различные вопросы по установке и настройке фреймворка, конфигурции веб-сервера и IDE.
Ответить
MozgoEd
Сообщения: 31
Зарегистрирован: 2012.06.18, 10:51

Не работают страницы кроме index.php

Сообщение MozgoEd »

Доброго времени суток!

Столкнулся с такой проблемой:
Перенес сайт с Apache на Nginx, все настроил. Работает даже отладка через Xdebug, но не работают все сраницы, кроме главной, т.е. если заходим http://site.ru - главная страница работает, но если обратимся например, http://site.ru/reg - нифига не работает, бьюсь уже несколько часов подряд. На Apache работало все и до сих пор работает. Все это счастье на Windows 7 + Winginx Куда рыть?

Настройки nginx для сайта:

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

server {
        listen       80;
        server_name  site.ru;

        charset utf-8;
        root   /home/site.ru/public_html;
        index  index.php;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
            #root   /usr/local/www/nginx-dist;
        #}

        location ~ \w+\.php$ {
                #вот тут лучше заменить на юникс сокет
                fastcgi_pass  localhost:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_script_name;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
                
        location ~ /(protected|themes/classic/views)/ {
            deny all;
        }
    }
MozgoEd
Сообщения: 31
Зарегистрирован: 2012.06.18, 10:51

Re: Не работают страницы кроме index.php

Сообщение MozgoEd »

Да забыл сказать, не работает это значит вываливает 404 Not Found. nginx/1.2.1
MozgoEd
Сообщения: 31
Зарегистрирован: 2012.06.18, 10:51

Re: Не работают страницы кроме index.php

Сообщение MozgoEd »

Так с этим разобрался. Не перестают радовать мануалы, как для Yii, так и для Nginx. Ну да ладно, оставим это на совести разработчиков.

Проблема решается заменой строк:

с: try_files $uri $uri/ /index.php?r=$request_uri; (обратим внимание на манул: http://yiiframework.ru/doc/cookbook/ru/install.nginx)

на: rewrite ^(.+)$ /index.php last;

Теперь не работает статика. Она хранится в папке Assets в корневой директории приложения. Пытаюсь разными правилами разрешить, но пока пишет 404 ошибку для статики. Но мы не сдаемся...
MozgoEd
Сообщения: 31
Зарегистрирован: 2012.06.18, 10:51

Re: Не работают страницы кроме index.php

Сообщение MozgoEd »

Разобрался. Выкладываю свой рабочий конфиг nginx для Windows7 (Nginx + Yii)

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

server {
    set $host_path "c:/Winginx/home/test.local";
    access_log c:/Winginx/logs/test.local-access.log  main;

    listen   127.0.0.1:80;
    server_name  test.local;
    root   $host_path/public_html;
    set $yii_bootstrap "index.php";

    charset utf-8;

    location / {
        index  index.html $yii_bootstrap;
        if (!-e $request_filename){
            rewrite ^(.*)$ /index.php;
        }
    }

    location ~ ^/(protected|framework|themes/\w+/views) {
        deny  all;
    }

    #отключаем обработку запросов фреймворком к несуществующим статичным файлам
    location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
        try_files $uri =404;
    }

    # передаем PHP-скрипт серверу FastCGI, прослушивающему адрес 127.0.0.1:9000
    #
    location ~ \.php {
        fastcgi_split_path_info  ^(.+\.php)(.*)$;

        #позволяем yii перехватывать запросы к несуществующим PHP-файлам
        set $fsn /$yii_bootstrap;
        if (-f $document_root$fastcgi_script_name){
            set $fsn $fastcgi_script_name;
        }

        fastcgi_pass   127.0.0.1:9000;
        #include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        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  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  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

        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        $server_name;

        # PHP only, required if PHP was built with --enable-force-cgi-redirect
        fastcgi_param  REDIRECT_STATUS    200;        
        fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;

        #PATH_INFO и PATH_TRANSLATED могут быть опущены, но стандарт RFC 3875 определяет для CGI
        fastcgi_param  PATH_INFO        $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
    }

    location ~ /\.ht {
        deny  all;
    }
} 
Напомню, что для разработки под Windows 7 (Php 5.3.14 + Nginx + Yii + MongoDB + Memcached + XCache + YiiMongoDBSuite) я использую Winginx http://winginx.ru/.
Ответить