Hướng dẫn kiểm tra và cấu hình php FastCGI, mod_rewrite đối với script viết trên nền framework CodeIgniter

1. Mục đích bài viết:
Ngày nay framework codeIgniter của PHP thường được sử dụng cho các trang tin tức, sản phẩm rất phổ biến. Đây là một framework mạnh mẽ về tốc độ, khả năng bảo mật, cấu trúc linh động và khả năng bảo trì tốt. Bài viết sau sẽ hướng dẫn khách hàng cách cấu hình mã nguồn khi sử dụng mod_rewrite và php FastCGI đối với loại framework này.

2. Hướng dẫn cách cấu hình mã nguồn:
a. Hướng dẫn cấu hình mod_rewrite trong file .htaccess (chỉ có trên Apache Server)
 Dưới dây là một ví dụ nội dung file .httaccess sử dụng mod_rewrite, cấu hình chuẩn dùng được cho nhiều mã nguồn. Tuy nhiên, khách hàng cần kiểm tra lại lại tên đường dẫn cho chính xác với mã nguồn của mình.
<IfModule mod_rewrite.c>
Options -Indexes +FollowSymLinks
RewriteEngine On
RewriteBase /
# chặn các đường dẫn không liên quan đến codeigniter-app
RewriteCond %{REQUEST_URI} !^/server-status
RewriteCond %{REQUEST_URI} !^/server-info
RewriteCond %{REQUEST_URI} !^/docs

#Nếu người dùng truy cập file hoặc folder không hợp lệ
# đường dẫn sẽ rewrite sang trang index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#Nếu web server sử dụng PHP mod_php thì sẽ chạy lệnh rule sau
<IfModule mod_php5.c>
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
# Nếu webserver sử dụng mod PHP khác (FastCGI) thì sẽ chạy lệnh rule sau
<IfModule !mod_php5.c>
RewriteRule ^(.*)$ index.php?/$1 [L]

</IfModule>

</IfModule>

<IfModule !mod_rewrite.c>
# Nếu hosting không hỗ trợ mod_rewrite, request index.php
ErrorDocument 404 /index.php
</IfModule>
Mở file config.php thường nằm trong thư mục application (/application/config/config.php) sửa lại dòng
$config'index_page'] = "index.php"
thành $config['index_page'] = "";
Bởi vì khi sử dụng mod_rewrite của Apache, nó sẽ đưa giá trị của dòng config trên vào URL.
Ví dụ: đường đẫn http://www.example.com/index.php/controller/method/variable sau khi thay đổi dòng config trên đường dẫn đẹp hơn và trở thành
http://www.example.com/controller/method/variable 
 
Trong trường hợp khách hàng truy cập website không thể chạy mod_rewrite mà báo lỗi: "No input file specified" là do Web Server sử dụng PHP mod FastCGI và cấu hình rule trong file .htaccess bị sai, lỗi này được giải quyết bằng cách xét trường hợp WebServer sử dụng mod_php hay mod FastCGI như file .htaccess chuẩn ở trên.
#Nếu web server sử dụng PHP mod_php thì sẽ chạy lệnh rule sau
<IfModule mod_php5.c>
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
# Nếu webserver sử dụng mod PHP khác (FastCGI) thì sẽ chạy lệnh rule sau
<IfModule !mod_php5.c>
RewriteRule ^(.*)$ index.php?/$1 [L]

b. Hướng dẫn cấu hình mode_rewrite và mod FastCGI trong file config của Nginx
nginx không hỗ trợ file .htaccess cho nên chúng ta sẽ cấu hình trực tiếp trong file config của nginx.
Giả sử khách hàng đã cài đặt thành công php-fpm. File cấu hình chuẩn như sau:
server {
    listen   80;
    server_name website.com www.website.com;

    root   /path/to/your/website.com/;
    index  index.php;
    error_log log/error.log;

    # set expiration of assets to MAX for caching
    location ~* .(ico|css|js|gif|jpe?g|png)(?[0-9]+)?$ {
           expires max;
           log_not_found off;
    }

    # main codeigniter rewrite rule
    location / {
        try_files $uri $uri/ /index.php;
    }
        
        # php parsing 
        location ~ .php$ {
            root           /path/to/your/website.com/;
            try_files $uri =404;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_buffer_size 128k;
            fastcgi_buffers 256 4k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;
        }

}
Khách hàng cần thay đổi các website.com thành tên domain của mình cũng như đường dẫn đến mã nguồn website
Sau đó mở file config.php thường nằm trong thư mục application (/application/config/config.php) của mã nguồn đảm bảo nội dung file config chứa các dòng như sau:
$config['base_url'] = "http://website.com/";
$config['index_page'] = "";
$config['uri_protocol'] = "REQUEST_URI";

Powered by WHMCompleteSolution