Зміст

Початок Основи Робота з формами Робота з БД Кешування Розширення Yii Тестування Спеціальні теми
Для чого реклама?

Конфігурація веб-серверів Apache та Nginx

Apache #

Yii готовий до роботи із налаштуваннями Apache за замовчуванням. Файли .htaccess у фреймворку та директоріях додатку обмежують доступ до деяких ресурсів. Для приховання файла точки входу (звичайно це index.php) в URL можна додати інструкцію для модуля mod_rewrite у файл .htaccess в кореневій директорії додатку чи у налаштуваннях віртуальних хостів:

RewriteEngine on

# не дозволяти httpd віддавати файли, що починаються із крапки (.htaccess, .svn, .git та інші)
RedirectMatch 403 /\..*$
# якщо директорія або файл існують, використовувати їх напряму
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# інакше відправляти запит на файл index.php
RewriteRule . index.php

Nginx #

Yii можна використовувати із веб-сервером Nginx та PHP за допомогою FPM SAPI. Нижче наведений приклад простої конфігурації хоста. Він визначає файл точки входу та змушує Yii перехоплювати всі запити до неіснуючих файлів, що дозволяє створювати людинозрозумілі URL-адреси.

server {
    set $host_path "/www/mysite";
    access_log  /www/mysite/log/access.log  main;

    server_name  mysite;
    root   $host_path/htdocs;
    set $yii_bootstrap "index.php";

    charset utf-8;

    location / {
        index  index.html $yii_bootstrap;
        try_files $uri $uri/ /$yii_bootstrap?$args;
    }

    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_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;
    }

    # не дозволяти nginx віддавати файли, що починаються із крапки (.htaccess, .svn, .git та інші)
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}

Використовуючи дану конфігурацію, можна у файлі php.ini встановити опцію cgi.fix_pathinfo=0 щоб уникнути безлічі небажаних системних викликів stat().


Для чого реклама?