Mengubah Struktur Permalink WordPress di Nginx

Monday, June 12, 2017

Mengubah Struktur Permalink WordPress di Nginx - Sebenernya ini sekalian saya jadikan arsip atau cacatan pribadi soalnya tadi hampir sejam ngotak atik nginx rule biar permalink lawas di redirect ke permalink baru. Dan karena di Google gak ketemu tutorialnya (entah karena jarang atau saya yang salah keyword), akhirnya nyoba nyoba sendiri. Beruntuk akhirnya berhasil. 😀

Jadi kasusnya, beberapa bulan lalu saya migrasi dari Blogger ke Self Hosted WP untuk subdomain NEWS LINUXSEC. Karena tidak terbiasa menggunakan Shared Hosting, saya akhirnya menyewa VPS dari Digital Ocean untuk server web berita saya. Untuk menyesuaikan link dari Blogger yang formatnya /tahun/bulan/post.html saya akhirnya menggunakan permalink berikut :
/%year%/%monthnum%/%postname%.html
Dan itu berlalu sampai satu bulan kemudian. Nah tadi, saya ingin mengubah permalink dari /%year%/%monthnum%/%postname%.html ke /%postname%/ saja. 

Jadi misal url post nya :
https://news.linuxsec.org/2017/05/wannacry-ransomware.html
Ingin saya ubah ke :
https://news.linuxsec.org/wannacry-ransomware/

Untuk mengubahnya saya rasa semua tau karena tinggal diubah di pengaturan permalink saja. Nah sekarang masalahnya adalah artikel yang terlanjur terindex di Google bakal not found jika tidak diakali. Belum lagi jika ada url artikel kita yang ada di blog lain.

Nah nyari nyari di forum belum ketemu solusi. Rata rata adalah tutorial untuk webserver Apache. Oke akhirnya saya coba menggunakan cara convert rule Apache ke Nginx tapi tidak langsung jadi. Ada beberapa proses.
Pertama , gunakan Permalink Helper milik Yoast SEO. 
Masukkan url situs permalink lama yang kalian gunakan. Klik generate redirect , maka akan dihasilkan rule htaccess.
Contoh punya saya :
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([^/]+).html$ https://news.linuxsec.org/$3
Kita coba convert rule tersebut ke nginx rule di 
https://winginx.com/en/htaccess
Ketika dipasang di Nginx ternyata error. malah semua postingan di redirect ke index. Oke kita coba akali.
Ubah rule diatas menjadi 
RewriteEngine On
RewriteRule ^/([0-9]{4})/([0-9]{2})/([^/]+).html$ https://news.linuxsec.org/$3? [L,NC,R=301]
Kita coba convert lagi, dan hasilnya :
location / {
rewrite "^/([0-9]{4})/([0-9]{2})/([^/]+).html$" https://news.linuxsec.org/$3? redirect;
}
Kita masukkan lagi ke konfigurasi nginx. Yang perlu diperhatikan, rewrite harus masuk ke block server, bukan http.
Jadi harus masuk di sesi 
server {
..............
.................................
Contoh implementasi :
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    include /etc/nginx/myconf/ssl-priv.conf;
    root /var/www/html;
    index index.php  index.htm;
    limit_req zone=one burst=20;
 server_name news.linuxsec.org;
        location / {
           rewrite "^/([0-9]{4})/([0-9]{2})/([^/]+).html$" https://news.linuxsec.org/$3/? redirect;
                try_files $uri $uri/ /index.php?$args;
        }
Nah jika semua sudah oke, restart nginx kalian. Sekarang kita coba akses url lama pasti di redirect ke url baru, jadi tidak Error 404 Not Found lagi. 😁

Baiklah sekian tutorial kali ini, jika ada yang kurang jelas silahkan bertanya.

Artikel Terkait Nginx ,WordPress

No comments:

Post a Comment