HTTPS จาก Let’s Encrypt แบบ Cloudflare
กดที่ cryto
เปิด Always use HTTPS ด้วย
Automatic HTTPS Rewrites
แก้ที่ wp-config.php
define('WP_SITEURL', 'https://www.xxx.com'); define('WP_HOME', 'https://www.xxx.com');
ติดตั้งปลั๊กอิน Really Simple SSL แล้ว Activate
วิธีนี้ไม่ต้องเปลียนอะไรใน Data base และ หน้า direct admin เลย
และ ห้ามไปเปลียน url ใน Database เพราะ ถ้า ถอด SSL เมื่อไร ดึงภาพไม่ขึ้น (เพราะ url เปลียนไปแล้ว)
การทำ HTTPS จาก Let’s Encrypt Direct admin
เข้า DA ทำตามขั้นตอนปกติ (หากมีการใช้ cloudflare ให้ตั้งค่า DNS เป็นของเว็บ ปกติก่อนใน godaddy หรือ name.com)
และ ไปแก้ url ของ woerdpress ทั้งหมด ให้เป็น https:
ในแต่ละ table
คำสั่ง SQL
UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl'; UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl','http://www.newurl'); UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl'); UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl');
ถ้าไม่แก้ url จะทำให้
1. ไฟล์ภาพเก่ายังคงเป็น url แบบ http เดิม ทำให้ ไม่โชว์กุญแจเขียว
2. admin cp ที่ permalink จะยังเป็น http เดิม ทำให้เวลาโพสท์บทความใหม่ รูปจะยังโพสท์เป็น http เดิม
A การติ๊กให้ ใช้ได้เฉพาะ private_html : จะทำให้ใช้ได้ เฉพาะ private_html
B การติ๊กให้ ใช้ได้ทั้ง public_html และ private_html : จะทำให้ใช้ได้ ทั้งสองแบบ
แต่สามารถบังคับให้ wordpress วิ่งไปที่ https อย่างเดียวก็ได้
wp-config.php
define('WP_SITEURL', 'https://www.insurancethai.net'); define('WP_HOME', 'https://www.insurancethai.net');
ทำ 301 Redirect ที่ .htaccess
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
วิธีที่ดีคือ น่าจะทำที่ DA ของโฮสต์และ ในระบบของ WordPress เลย
เวลาย้ายไปไหน ก็ลง ใน folder https://domain
เทคนิค
ถ้ากลัวเว็บเดิมพังให้ backup ก่อน และ ทดสอบลง wordpress ใน domain ว่างๆ ทำตามวิธีที่วางไว้
ถ้าสำเร็จก็แสดงว่าใช้ได้
หลังจากทำสำเร็จแล้ว ต่อไปการเข้า admin cp ของ wordpress มันจะ เป็น https เสมอ
Let’s Encrypt + DirectAdmin + WordPress
Direct Admin
1.ติดตั้ง Let’s Encrpyt SSL Certificate บน Direct Admin
2.เลือกว่าจะใช้งาน private_html ตรงๆ หรือใช้เป็น symbolic link
(สำหรับผมเลือกใช้ Symbolic Link ไปเลยง่ายดีจะได้ไม่ต้องย้ายไฟล์ไปที่ private_html) คือจะเข้าทางไหนก็ได้ (http และ https แต่อาจมีปัญหาเรื่อง security หรือ content duplicate) ซึ่งบางโฮสต์ทำให้ private_html เป็น shotcut ไปยัง plublic_html
WordPress
1.เปลี่ยนเป็น HTTPS ใน Settings > General ให้เป็นชื่อเว็บไซต์ของเราโดยเปลี่ยนจาก http://yoursite ให้เป็น https://yoursite
2. แก้ไขไฟล์ .htaccess เพิ่มโค้ดส่วนไฮไลท์ เพื่อบังคับ http ให้กลายเป็น https
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
3. Search & Replace ในฐานข้อมูลของเรา จาก http://yoursite ให้เป็น https://yoursite โดยให้ทำที่ตารางที่ชื่อว่า wp_posts ในคอลัมน์ที่ชื่อ post_content และ guid
UPDATE wp_posts SET post_content = REPLACE( post_content , 'http://yoursite' , 'https://yoursite' ); UPDATE wp_posts SET guid = REPLACE( guid , 'http://yoursite' , 'https://yoursite' );
+https://www.siamecohost.com/tutorials/lets-encrypt-setup-da.php
+https://hosting.nakhonitech.com/knowledgebase/22/-Letandsharp039s-encrypt–SSL–web-hosting.html
ปัญหา
อยู่ที่ DNS ไม่อัพเดท เช่น การตั้งค่าDNS ไป cloudflare (ซึ่งขณะที่ชี้ไปที่นั่นจะขอ SSL ของ host ไม่ได้ ต้องชี้ DNS กลับมา host ก่อน) ให้เปลียนกลับมา host ก่อน (รอ DNS อัพเดท1วัน) ตั้งค่าเสร็จแล้ว ค่อยไปสวม cloudflare
ขั้น advance
เราสามารถเข้าเว็บ โดย by pass เข้าตรง server จาก computer เลย
ขอ Let’s encrypt สำเร็จ (จะขึ้น success) แก้ url site ของ wordpress ที่หน้า admin ให้เป็น https ซึ่งจะทำให้ เข้าหน้านั้นไม่ได้อีก ต้องไปแก้คืนที่ DB
หรือลอง ใช้ plugin เพื่อ redirect เว็บไซต์เป็น https
+https://wordpress.org/plugins/really-simple-ssl/
ซึ่งมันขึ้นเตือนว่า cer ผิดพลาด
(แล้วหากไป แก้ที่ seting>general ให้เป็น https มันก็จะเข้า admin ไม่ได้เหมือนกับวิธีด้านบน)
แก้ค่าคืน โดยแก้ไฟล์ force-deactivate.txt เป็น force-deactivate.php ที่ ปลั๊กอิน แล้วรันไฟล์ (หรือ แก้คืนที่ DB)
ถ้า DNS ไม่อัพเดท แล้วเราไป เปลียน เป็น https ทั้งเว็บใน DB จะทำให้ เวลาเข้า admin หรือ เว็บ มันจะ วิ่งสลับกัน ระหว่าง http และ https
วิธีที่ทำได้จริง
ถอด DNS จาก cloudflare มาที่ hosting
(ตรวจสอบ certify ใน Direct Admin อีกครั้ง)
(ลองใน firefox ลบ catch เปลี่ยน net)
รอ 1 วัน
ตอนเช้ามารัน plugin really-simple-ssl จะพบว่ามันแจ้งว่าเจอ ssl Let’s encrypt แล้ว
กดให้มันเปลียน เป็น https หรือ แก้ค่าใน site url ใน seting>general
เท่านี้ก็จะเป็น https แล้ว ถ้าไม่เปลียนค่า ตรงนี้ เวลา อัพโพส รุปจะยังเป็น http
อย่าลืมตั้งให้มันซิงค์กันระหว่าง http_public กับ http_private เป็นไหม? ไม่งั้นมันจะเข้าไม่ได้ เพราะมันจะไปดูที่ Private อย่างเดียว
check DNS
https://mxtoolbox.com/DNSLookup.aspx
https://dnschecker.org
domain propagation คือการที่เราเปลี่ยนให้โดเมนเนมของเราชี้ไปที่ยัง physical location หรือ ที่เรา เรียกว่า IP Address ของโดเมนเนมของบน Internet
เมื่อเราทำการ เปลี่ยน IP Address ของโดเมนเนม หรือ จดโดเมนเนมใหม่ เราจึงต้องรอประมาณ 24-48 ชั่วโมง เพื่อให้โดเมนเนม ทำการ propagate ในขณะที่ท่านกำลังเปลี่ยนที่อยู่ใหม่ของโดเมนเนม Name Server บางเครื่องอาจจะชี้ที่อยู่ของเว็บไซต์ของคุณไปยังที่อยู่เก่าและ Name Server บางเครื่องอาจจะชี้ไปยังที่อยู่ใหม่ ดังนั้นเพื่อไม่ให้เกิดปัญหากับผู้เข้าชมเว็บไซต์ของท่าน เราจึงขอแนะนำให้กระบวนการทั้งหมดได้ทำการปรับปรุงข้อมูลเรียบร้อยแล้ว (ใช้เวลาประมาณ 24-48 ชั่วโมง) จากนั้นจึงค่อยทำการยกเลิกการทำงานของโฮสติ้งเก่า ระบบก็จะ ทำงานได้อย่างต่อเนื่อง และการใช้งาน ก็จะไม่มีการสะดุด
Your domain is not pointing to our nameservers at the moment, so services such as FTP, File Manager, E-mail (and others) will not work correctly. You can find our nameservers at the “Accounts -> Details” section. Please mind that DNS might take up to 24 hours to propagate when the change is submitted.
-http://www.mylookhin.net/knowledgebase/25/-Free-SSL-Letandsharp039s-Encrypt.html
+https://codex.wordpress.org/Changing_The_Site_URL
How to Mass Change old URLs in Website Database after Migration
+https://blog.templatetoaster.com/update-old-urls-in-database/
+https://blog.templatetoaster.com/databases-work-wordpress/
+https://wpguru.co.uk/2014/12/how-to-find-and-replace-in-mysql-with-phpmyadmin/
การอัพเดท link หลังจาก ทำ SSL ใช้ plugin สะดวกกว่าการไปอัพเดทใน database
มีหลายตัวเช่น
+https://wordpress.org/plugins/velvet-blues-update-urls/
URLs in page content ( posts, pages, custom post types, revisions ) URLs in excerpts URLs in links URLs for attachments ( images, documents, general media ) URLs in custom fields and meta boxes Update ALL GUIDs GUIDs for posts should only be changed on development sites. Learn More.
+https://th.seedthemes.com/blog/secure-websites-with-https/
RewriteEngine On
แจ้งให้ Web Server รู้ว่ามีการใช้งาน mod_rewrite.c
RewriteCond %{HTTPS} !=on
เช็คว่า ถ้า Protocol ปัจจุบัน ไม่ใช่HTTPS (ค่า !=on หมายความว่าไม่ใช่ https)
RewriteCond %{HTTPS} off
เช็คว่า ถ้า Protocol ปัจจุบันไม่ใช่HTTPS (off ความหมายเดียวกันกับ !=on)
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
หมายถึงขึ้นต้น และลงท้ายด้วยอะไรก็ตาม ให้เปลี่ยนทางไปที่ https://%โฮสต์%ไฟล์ที่เรียก [กฏสุดท้าย,เปลี่ยนทางแบบถาวร]
บรรทัดสุดท้ายแนะนำให้ใช้แบบ R=301 เพื่อแจ้งให้เปลี่ยนทางถาวร ไม่งั้นจะเกิด duplicate content กับ http อีก
[L]
Last rule: instructs the server to stop rewriting after the preceding directive is processed.
[L]
กฎสุดท้าย: สั่งให้เซิร์ฟเวอร์หยุดการดำเนินการ (กรณีที่เข้าเกณฑ์ทั้งหมด) หลังจากประมวลผลคำสั่งเรียบร้อย
สรุปใช้
RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # first add www and make sure it is https:// RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # http -> https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
คำสั่งเปลียน http เป็น https ในหน้า เนื้อหา
UPDATE wp_posts SET post_content = replace(post_content, 'http://', 'https://');
+https://www.ssllabs.com/ssltest/
# BEGIN WordPressRewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # Rewrite HTTP to HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L] # END WordPress
credit code : https://wordpress.stackexchange.com/…/wordpress…
แต่… ยังไม่ติดซะทีเดียววิธีลัด เสียงลอยมา “พึ่งพา plugin อีกแล้วเหรอ?. ” แต่ถ้าใช้งานได้ดีก็เอา Really Simple SSL ไปติดตั้งครับ
กับ WP Let’s Encrypt Plugin ให้มันทำการ Reset ตัวเองทุก ๆ 15 วัน (ค่า Default ใน plugin)
1. https://wordpress.org/plugins/wp-encrypt/
2. https://wordpress.org/plugins/really-simple-ssl/
โดยรวมหลังจากผมทำใช้วิธีข้างต้น บวกกับตั้งค่าใน Host กับ General Settings ตรง URI ของ wordpress เป็น https แล้วมันก็จะรันทันทีเลยครับ 🙂