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
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()
.