Tổng hợp thủ thuật với file .htaccess trong WordPress.

Tập tin .htaccess là một tập tin cấu hình, cho phép bạn kiểm soát các tập tin và thư mục trong host và tất cả các thư mục con của chúng. Tên của nó được viết tắt từ chữ hypertext access và được hỗ trợ bởi hầu hết các loại máy chủ web (nổi bật là Apache và LiteSpeed). Đối với nhiều người dùng WordPress, lần đầu tiên làm quen với tập tin htaccess là khi họ tùy chỉnh các thiết lập permalink của blog/ website. Để có được permalink đẹp, chẳng hạn như https://wpcanban.com/sample-post.html thay vì https://wpcanban.com/?p=123, chúng ta cần thêm một đoạn mã như thế này vào tập tin htaccess:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Nếu tập tin htaccess không tồn tại, bạn có thể tự tạo và tải nó lên. Tất cả những gì bạn phải làm là tạo ra một tập tin văn bản trống, lưu nó với đuôi .htaccess và tải nó vào thư mục gốc, nơi cài đặt WordPress. Bạn cũng cần phải đảm bảo tập tin htaccess là writeable (cho phép ghi) để WordPress có thể thêm code phù hợp vào trong. WordPress.org khuyên người dùng nên để permissions (CHMOD) là 644 cho tập tin htaccess.
Tham khảo thêm:
Tập tin htaccess trong WordPress không chỉ được sử dụng cho permalink. Nó còn được biết đến với khả năng tăng cường sự bảo mật cũng như cải thiện tốc độ load cho blog/ website. Hàng triệu người dùng WordPress sử dụng tập tin htaccess để bảo vệ blog/ website của họ khỏi spammer, hacker và các mối đe dọa an ninh khác.
Trong bài viết này, tôi sẽ chia sẻ với các bạn một số đoạn code hữu ích dành cho tập tin htaccess, giúp blog/ website của bạn load nhanh hơn và an toàn hơn. Ngoài ra còn có một số chức năng bổ sung khác mà tôi tin rằng bạn sẽ thấy chúng thực sự thú vị.
Tổng hợp thủ thuật với file htaccess
Lưu ý: htaccess là một tập tin rất quan trọng, bạn cần phải tạo một bản backup trước khi tiến hành chỉnh sửa nó để tránh các sai sót đáng tiếc có thể xảy ra.
1. Bảo vệ tập tin htaccess
Tập tin htaccess kiểm soát hầu như toàn bộ blog/ website của bạn nên việc bảo vệ nó khỏi sự xâm nhập trái phép là một việc rất quan trọng. Đoạn code sau đây sẽ giúp ngăn chặn hacker truy cập vào tập tin htaccess.
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
2. Bảo vệ tập tin wp-config.php
Một tập tin quan trọng không kém của WordPress là wp-config.php. Tập tin cấu hình này chứa các thông tin đăng nhập cơ sở dữ liệu WordPress của bạn cũng như các thiết lập bảo trì quan trọng khác. Do đó, bạn nên vô hiệu hóa việc người lạ truy cập vào nó.
<files wp-config.php>
order allow,deny
deny from all
</files>
3. Bảo vệ thư mục wp-content
Thư mục wp-content là một trong những khu vực quan trọng nhất của WordPress. Đây là nơi chứa các tập tin của themes, plugins, các tập tin đã được upload (hình ảnh và video)… và các tập tin cache. Do đó, nó là một trong những mục tiêu chính của tin tặc.
Bạn có thể giải quyết các mối đe dọa bảo mật bằng cách tạo ra một tập tin htaccess riêng cho thư mục /wp-content/ và thêm đoạn code sau đây vào trong:
Order deny,allow
Deny from all
<Files ~ ".(xml|css|jpe?g|png|gif|js)$">
Allow from all
</Files>
Sau đó bạn cần phải upload tập tin htaccess này vào thư mục /wp-content/. Nó thường nằm ở đường dẫn: /public_html/wp-content/. Việc làm này sẽ cho phép các tập tin media được tải lên bao gồm XML, CSS, JPG, JPEG, PNG, GIF và JavaScript. Tất cả các loại tập tin khác sẽ bị từ chối.
4. Chặn include-only files
Có một số tập tin mà người dùng không bao giờ được phép đụng tới (thường nằm trong các thư mục có tên chứa từ “includes”). Bạn có thể chặn việc truy cập vào những tập tin này bằng cách thêm đoạn code sau vào tập tin htaccess:
# Block the include-only files.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
5. Hạn chế truy cập khu vực Admin
Một khu vực thường xuyên bị tấn công bởi các tin tặc là WordPress Admin (trang quản trị). Nếu truy cập được vào khu vực này, chúng có thể làm hầu hết mọi thứ trên blog/ website của bạn.
Để làm cho khu vực này an toàn hơn, bạn cần tạo ra một tập tin htaccess cho riêng nó và thêm đoạn mã dưới đây vào:
# Limit logins and admin by IP
<Limit GET POST PUT>
order deny,allow
deny from all
allow from 12.34.56.78
</Limit>
Hãy thay đổi 12.34.56.78 thành địa chỉ IP của bạn (bạn có thể tìm ra địa chỉ IP của mình tại What Is My IP?). Sau đó upload tập tin htaccess vào thư mục /wp-admin/. Nó thường nằm ở đường dẫn: /public_html/wp-admin/. Nếu muốn thêm các địa chỉ IP khác, bạn chỉ cần thêm tiếp vào mục allow from. Các địa chỉ IP được ngăn cách nhau bởi 1 dấu phẩy và dấu cách.
6. Cấm một ai đó truy cập website
Nếu bạn biết địa chỉ IP của một người nào đó là nguy hiểm, bạn hoàn toàn có thể cấm họ truy cập blog/ website của bạn bằng cách sử dụng đoạn code dưới đây:
<Limit GET POST>
order allow,deny
deny from 123.456.78.9
deny from 987.654.32.1
allow from all
</Limit>
Thay địa chỉ IP bằng IP mà bạn muốn cấm (ban) cho phù hợp.
7. Chuyển hướng khách truy cập đến trang bảo trì
Nếu bạn muốn chuẩn bị cho những điều tồi tệ nhất có thể xảy ra, tôi khuyên bạn nên tạo một trang HTML cơ bản có tên là maintenance.html, nhằm thông báo cho khách truy cập rằng blog/ website của bạn đang gặp một chút vấn đề nhưng sẽ hoạt động trở lại trong một thời gian ngắn. Khi blog/ website của bạn gặp vấn đề do bị hack hoặc do lỗi màn hình trắng, chỉ cần thêm đoạn mã dưới đây vào tập tin htaccess để chuyển hướng tất cả khách truy cập đến thông điệp của bạn tại maintenance.html.
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L]
8. Vô hiệu hoá việc truy cập directory
Cho phép người lạ truy cập các tập tin và thư mục của bạn có thể là một nguy cơ lớn về bảo mật. Để vô hiệu hóa việc truy cập các thư mục, chỉ cần thêm đoạn code sau đây vào tập tin htaccess của bạn:
# disable directory browsing
Options All -Indexes
9. Kích hoạt cache cho trình duyệt
Kích hoạt cache (bộ nhớ đệm) cho trình duyệt web là một trong những thủ thuật nhằm tăng tốc độ load và giảm tải cho blog/ website. Khi được kích hoạt, trình duyệt web sẽ cache các dữ liệu đã tải trước đó (CSS, JS, hình ảnh…), giúp khách truy cập tiết kiệm thời gian vì họ không cần phải tải lại các tài nguyên. Việc này cũng giúp bạn tiết kiệm tài nguyên cho host.
Để cho phép kích hoạt bộ nhớ đệm, tất cả những gì bạn cần làm là thêm đoạn code sau đây vào tập tin htaccess trong thư mục gốc của WordPress:
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>
## EXPIRES CACHING ##
10. Chuyển hướng URL
Chuyển hướng 301 giúp bạn thông báo cho công cụ tìm kiếm rằng một URL đã chuyển hướng đến vị trí mới. Chúng có thể được sử dụng để chuyển hướng một trang, một bài viết hoặc thậm chí là cả một website. Do đó chúng đặc biệt hữu ích khi bạn thay đổi URL của site (có thể là thay đổi tên miền, thay đổi cấu trúc permalink hoặc chỉ đơn giản là thay đổi link bài viết).
Để chuyển hướng một trang, tất cả những gì bạn cần làm là thêm một dòng với cấu trúc “Redirect 301 [dấu cách] URL cũ [dấu cách] URL mới” vào trong file htaccess. Bạn có thể xem cách làm việc này trong ví dụ dưới đây:
Redirect 301 /oldpage.html http://www.yourwebsite.com/newpage.html
Redirect 301 /oldfolder/page2.html /folder3/page7.html
Redirect 301 / http://www.mynewwebsite.com/
11. Vô hiệu hóa hotlinking
Hotlinking là việc ai đó sử dụng hình ảnh từ blog/ website của bạn bằng cách liên kết trực tiếp đến URL của hình ảnh. Điều này thường xảy ra khi họ copy toàn bộ nội dung bài viết từ blog/ website của bạn và paste vào site của họ mà không qua chỉ sửa (có thể là do “lười” nên copy cả hình ảnh cho nhanh, không download rồi re-up). Hotlinking có thể tác động tiêu cực đến blog/ website. Ngoài việc làm chậm blog/ website, nó cũng có thể làm tiêu tốn đáng kể băng thông của host.
Thêm đoạn code dưới đây vào tập tin htaccess sẽ giúp ngăn chặn những người khác copy và sử dụng trực tiếp hình ảnh từ blog/ website của bạn:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourotherwebsite.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ http://i.imgur.com/g7ptdBB.png [NC,R,L]
Khi một ai đó xem hình ảnh của bạn tại một site khác, họ sẽ nhìn thấy hình ảnh thay thế (link của nó nằm trong dòng cuối cùng của đoạn code) thay vì ảnh gốc. Bạn có thể sửa đổi hình ảnh này theo ý muốn.
Lưu ý: việc vô hiệu hóa hotlinking có thể gây ra một số vấn đề về hiển thị hình ảnh của bạn trong nguồn cấp dữ liệu RSS cũng như trên các mạng xã hội.
Trên đây là một số thủ thuật với file .htaccess trong WordPress, tôi hy vọng nó sẽ hữu ích đối với bạn. Mọi ý kiến thắc mắc và đóng góp xin vui lòng gửi vào khung bình luận bên dưới để được hỗ trợ.
Nếu bạn thích bài viết này, hãy subscribe blog của tôi để thường xuyên cập nhật những bài viết hay nhất, mới nhất qua email nhé. Cảm ơn rất nhiều. :)






bạn ơi cho mình hỏi là nếu sử dụng plugin tạo cach rồi thì có cần làm bước 9 không vậy
Có plugin tạo cache rồi thì thôi bạn nhé. :)
Bài viết rất hữu ích, cảm ơn bạn!
e thêm các mục 1, 2, 4, 8, 11 vào .htaccess . giờ vào trang quản trị ra lỗi này a ơi :(
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator and inform them of the time the error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.
Lỗi thì xóa đi là được mà. Không phải nhét tất cả code vào cùng lúc đâu. Phải có sự chọn lựa mới được, nếu không chúng sẽ xung đột lẫn nhau. :P
cho e hỏi là cái kích hoạt cache đó có cần thiết không khi có WP rocket rồi ạ? e add hết chỗ này vào có vấn đề gì không a? có lỗi giao diện gì không ạ?
Đã cài plugin tạo cache rồi thì không cần thêm code bật cache vào .htaccess để tránh xung đột nha. :P
Hiếu ơi, có nghĩa là sẽ có nhiều file .htaccess và mỗi thư mục cần bảo mật sẽ phải tạo 1 file riêng với tên giống nhau rồi up vào đúng thư mục của nó à?
Đúng rồi bạn. Hoàn toàn có thể tạo nhiều file .htaccess cho thư mỗi thư mục nhé. :P
Cảm ơn add, bài viết rất chi tiết và dễ hiểu.
Tại sao mình file .htaccess trên vps lại không có tác dụng gì vậy?
Bạn dùng Webserver gì? Nginx à? :P
Mình dùng apache
Vậy thì lạ quá. Apache và LiteSpeed đều hỗ trợ .htaccess mà. :P
Thì vậy đấy, cho dù có viết nguyên cả một câu chuyện bỏ vào trong nó cũng chẳng ảnh hưởng gì :)
Vậy thì mình cũng bó tay. :)
Ad ơi có cách nào redirect url /phpmyadmin không?
Trong file .htaccess mình thêm dòng này
Redirect 301 /phpmyadmin/ /
nhưng không redirect được.
Thanks.
Bạn redirect URL của phpMyAdmin làm gì vậy? :P URL của phpMyAdmin không thể redirect được bằng file .htaccess đâu bạn nhé. .htaccess chỉ có tác dụng redirect các file hay URL được lưu trữ trên thư mục public_html của bạn thôi. :P
Mục đích của mình là không show cái form đăng nhập phpmyadmin cho user khác và chuyển nó về trang chủ (nhằm bảo mật hơn). Theo bài viết của ad thì mình đã rediret /wp-admin về /home rồi.
Thanks.
Trời đất. Bạn muốn redirect wp-admin mà lại viết là phpMyAdmin làm mình cứ tưởng. :P
kết hợp với đoạn code của bài Những việc cần làm khi cài đặt wordpress thì đây có phải là kết quả cuối cùng cho file .htaccess không hả anh. file .htacess ngoài cùng ấy ạ
http://s1.upanh123.com/2016/09/17/179ef2.png
Bị conflict giữa các code tạo cache rồi. Dùng 1 code thôi. :P
e ko hiểu a ơi. đầu tiên file .htaccess gốc của e là file a chia sẻ ở bài kia. bất đầu e chèn code vào trong thẻ #begin wordpress — #end wordpress. e chèn mấy cái như bài trên a viết thôi mà. code này của e đã bớt một số mục và ko thêm cái tạo cache kia rồi. a xem đã ổn chưa để e up lên web ạ
http://s1.upanh123.com/2016/09/17/237af8.png
Có vẻ ổn rồi đấy. Thử lưu lại xem có bị lỗi không. :P
ko đc a ơi. vân báo lỗi. ko thể sửa. e up file từ máy lên thay cho file đấy cũng báo lỗi nữa. k biết e có cấu hình cái gì mà k thể sửa đc file đấy rồi hay sao ấy @@ e nhớ chỉ làm với yoast seo thôi. và tất cả thao tác đề là bài viết trên blog a. k nghịch gì linh tinh cả. sao kì vậy ta.
Kiểm tra lại CHMOD của tập tin .htaccess và khôi phục nội dung như trong bài viết này thử xem: https://wpcanban.com/wordpress/thu-thuat-wordpress/nhung-viec-ban-can-lam-ngay-sau-khi-cai-dat-wordpress.html :P
e chịu @@ code của e đây. sao tự nhiên lại có 2 cái giống nhau thế nhỉ, chả hiểu sao @@
nếu e xóa hẳn file này đi rồi tải file khác lên thay cho thì cái web nó có hỏng luôn ko a
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Có lẽ nào GoDaddy không cho phép thay đổi file .htaccess? :P
Bạn cho mình hỏi làm cách này để đổi tên miền từ http://example.com/wordpress thành http://example.com/ vậy?
Mình có đọc ở trang này https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory nhưng không hiểu lắm
Bạn vào Settings => General => Site Address (URL) => nhập http://example.com vào và lưu lại. :P
Mình làm như cách bạn nói, nó cũng vậy không khác gì :D
Mình đang dùng host và domain của web.com, bữa thấy nó đề host + domain – $0,5, đăng ký thử (trong tài khoản MasterCArd chưa có tiền) mà đăng ký được mới ác :) mà hình như trang này dùng host window thì phải?
Nếu vậy thì phải tìm và đổi URL trong database. Bạn có thể export database về máy tính, dùng NotePad++ mở ra, tìm và thay thế toàn bộ URL cũ bằng URL mới. Drop tất cả table của database cũ và import database mới lên. Mình chưa dùng host của thằng web.com bao giờ nên cũng không rõ. :P
Mình đưa ID và Pass quản lý trang web.com, bạn vào xem thử giúp mình nha?