[Apache] Fix lỗi Web Server Apache – No matching DirectoryIndex (index.html) found
Bài hướng dẫn này có nội dung chủ yếu là tìm cách giải quyết cho lỗi được thông báo bởi dịch vụ Apache có dạng như sau :
[....]: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive
Bài viết này có thể áp dụng hầu hết cho các hệ thống có sử dụng dịch vụ Web Server Apache về việc hiểu vấn đề chúng ta cần fix chỗ nào là được. Ở đây mình sẽ ví dụ sử dụng hệ thống CentOS.
Ví dụ cụ thể: phpMyAdmin có chứa file “index.php” khi cài đặt và vận hành. Bạn sẽ nhận phải thông báo này khi kiểm tra file “error.log“, thì là do cấu hình chưa phù hợp ở Web Server Apache.
[autoindex:error] [pid 20115] [client 192.168.1.100:50800] AH01276: Cannot serve directory /usr/share/phpMyAdmin/: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive
DirectoryIndex là phần chỉ định file sẽ load đại diện mặc định cho nội dung directory.
Giả sử, bạn truy cập URL “https://cuongquach.com/” , thì Web Server không biết phải load trang này là phải load file gì nếu như bạn không cấu hình redirect .htaccess hay cấu hình Nginx để chỉ định load file mặc định. Nó sẽ khác nếu bạn truy cập URL “https://cuongquach.com/index.php“, Web Server biết nó phải load file gì để generate nội dung website cho bạn.
Như vậy có thể hiểu, “DirectoryIndex” hay các nội dung cấu hình tương đương khác trên các Web Server, nhằm giúp Web Server khi load các URL tương đối sẽ tìm đến file được chỉ định mặc định, thường sẽ là “index.php index.html index.htm“.
Với thông báo lỗi trên của phpMyAdmin, xảy ra khi Apache cố gắng truy cập file đại diện cho trang mặc định đầu tiên của đường link tương đối đó, nhưng không tìm thấy file được cần tìm “index.html” mà chỉ thấy “index.php” nhưng không được cấu hình load file này. Nếu file đại diện không được liệt kê trong danh mục chỉ định, thì Web Server sẽ không biết phục vụ file nào khi người dùng truy xuất tới link tương đối.
Ví dụ, phpMyAdmin sử dụng “index.php” khi hoạt động, chứ không phải “index.html“.
Mặc định Apache được cấu hình DirectoryIndex như sau :
<IfModule dir_module> DirectoryIndex index.html </IfModule>
-> Điều đó có nghĩa Apache chỉ tìm kiếm file index directory có tên là “index.html“.
Trong trường hợp này chúng ta sẽ thêm “index.php” vào nội dung cấu hình “DirectoryIndex“.
# vi /etc/httpd/conf/httpd.conf
Đổi :
<IfModule dir_module> DirectoryIndex index.html </IfModule>
Sang :
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
Sau đó lưu file, thoát rồi khởi động lại dịch vụ Web Server Apache.
# /etc/init.d/httpd restart