Vấn đề
Trang blog Wordpress của mình trước kia dùng host của GoDaddy. Tốc độ hơi chậm mà lại không kiểm soát server nhiều được, với cả chấm điểm PageSpeed Insights chưa thoả mãn nên mới rục rịch chuyển sang Amazon EC2. Chuyển sang được ngon lành, vào trang chủ không một lỗi lầm, nhưng click vào các bài viết thì xuất hiện lỗi 404. Lỗi này khá phổ biến khi chuyển server như thế.
Nguyên nhân
- Bạn đang dùng một setting permalinks khác với mặc định (dạng
mydomain.com/?p=123
), và ở server mới thì bạn chưa có file.htaccess
, hoặc có nhưng hạn chế quyền để WP có thể ghi được. Permalinks mặc định của WP không cần file.htaccess
, trong khi các options còn lại thì cần. - Chưa bật mod
rewrite
của Apache. - Setting virtual host cho Apache chưa đúng.
Khắc phục
- Bật module rewrite
sudo a2enmod rewrite
- Kiểm tra xem WP có quyền ghi vào file
.htaccess
hay không. Vào trangAdmin > Settings > Permalinks
, nếu thấy bên dưới nút Save Changes có thông báo *If your .htaccess file were writable… *thì WP đang không thể ghi vào.htaccess
. Đổichown
cho phù hợp vàchmod 644
.
sudo chmod 644 /path/to/.htaccess
- Cho phép sử dụng
.htaccess
sau khi đã bật modulerewrite
của Apache và dùngmod_rewrite.c
trong.htaccess
(WP đã làm việc này ở bước trên rồi)
# open .conf file for edit
sudo nano /etc/apache2/sites-available/my-domain.com.conf
# edit file .conf
<VirtualHost *:80>
ServerName my-domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
Options FollowSymLinks AllowOverride FileInfo
</Directory>
</VirtualHost>
# restart apache to apply changes
sudo service apache2 restart
- Vào lại
Admin > Settings > Permalinks
, chọn một option ưa thích và bấm Save Changes - Nếu vẫn chưa vào được từng bài viết, và WP vẫn báo không thể ghi file
.htaccess
, thì bạn phải tự sửa với nội dung như sau:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Tổng kết
Trên đây là cách khắc phục mình tổng hợp lại sau khi đọc rất nhiều bài hướng dẫn khác. Tóm lại thì lỗi này do chưa config nhà mới đúng cách nên WP không thể chạy nuột như ở nhà cũ. Việc chuyển nhà cho WP cũng khá dễ dàng, không cần chỉnh sửa gì nhiều hết, chỉ cần edit lại wp-config.php
với DB mới rồi ôm tất cả sang. Thế là xong!