htaccess - dash to underscore

htaccess - dash to underscore

  • Trong quá trình tạo một trang web, đặt biệt là trang web lớn, hoặc trang web có nhiều người tham gia, hoặc trang web làm trong thời gian dài, ... sẽ dễ xảy ra tình trạng không đồng bộ đường dẫn, lúc thì tên đường dẫn dùng gạch dưới, lúc thì dùng gạch ngang, ... dễ gây khó chịu cho người dùng, làm cho trang web thiếu đi tính chuyên nghiệp.
  • Để giải quyết vấn đề trên, .htaccess có thể thay đổi tên đường dẫn bằng cách chuyển gạch dưới thành gạch ngang hoặc ngược lại.
    Ví dụ như từ đường dẫn gạch ngang này:
    https://hocwebchuan.com/hoc_htaccess_qua_don_gian
    Chuyển thành:
    https://hocwebchuan.com/hoc-htaccess-qua-don-gian

htaccess - chuyển gạch dưới thành gạch ngang

  • Đây là dạng chuyển đổi phổ biến, vì dễ nhìn hơn, có vẻ thân thiện hơn, ta thực hiện như sau:
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase / 
RewriteRule !\.(html|php)$ - [S=4] 
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes] 
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=uscor:Yes] 
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=uscor:Yes] 
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=uscor:Yes] 
RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://domain.com/$1 [R=301,L]
  • !\.(html|php)$ - [S=4] nếu định dạng khác với .html hoặc .php thì sẽ bỏ qua 4 rule bên đưới.
  • ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=uscor:Yes] Xét từng đoạn để nhận biết gạch dưới (_) và thay thế bằng gạch ngang (-) tương ứng, đồng thời gán biến môi trường uscor với giá trị là yes.
  • Tương tự cho chuỗi 4 đoạn, 3 đoạn và 2 đoạn.
  • %{ENV:uscor} ^Yes$ xét điều kiện tồn tại biến môi trường, cũng có nghĩa là trong chuỗi có tồn tại gạch dưới (_).
  • (.*) http://domain.com/$1 [R=301,L] khi này bắt đầu tiến hành redirect gắn chuỗi mới vào domain.
  • Với code bên trên thì chỉ đáp ứng được đường dẫn có 5 đoạn thôi (tương ứng 4 gạch dưới), nếu đường dẫn có 6 đoạn trở lên thì các bạn cần viết thêm rule cho nó nhé.

htaccess - chuyển gạch ngang thành gạch dưới

  • Tương tự như trên, ta có thể chuyển gạch ngang thành gạch dưới như sau:
Options +FollowSymLinks 
RewriteEngine On 
RewriteBase / 
RewriteRule !\.(html|php)$ - [S=4] 
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-([^-]*)-(.*)$ $1_$2_$3_$4_$5 [E=uscor:Yes] 
RewriteRule ^([^-]*)-([^-]*)-([^-]*)-(.*)$ $1_$2_$3_$4 [E=uscor:Yes] 
RewriteRule ^([^-]*)-([^-]*)-(.*)$ $1_$2_$3 [E=uscor:Yes] 
RewriteRule ^([^-]*)-(.*)$ $1_$2 [E=uscor:Yes] 
RewriteCond %{ENV:uscor} ^Yes$
RewriteRule (.*) http://domain.com/$1 [R=301,L]