Beberapa hari yang lalu saya mendapatkan tantangan baru untuk memasang web berbasis WordPress (WP) berdampingan dengan website berbasis Laravel dalam satu hosting dan domain. Karena saya belum seberapa paham dengan Framework Laravel dan ini merupakan pengalaman pertama, langsung saja saya install WordPress seperti biasa. Dan benar saja, web WP yang saya install tidak dapat diakses.

Seperti biasa, cari jawaban dengan tanya mbah Google dan tanya beberapa teman di grup Surabaya WP Meetup. Setelah menjelajah sana sini dan coba beberapa saran dari teman, akhirnya menemukan cara bagaimana bisa menjalankan web WordPress dengan web Laravel dalam satu hosting dan domain. Kunci dari pemasalahan ini ada pada pengaturan .htaccess.

Sebelum lebih jauh seperti apa pengaturan .htaccess agar dapat menjalankan WP dan Laravel dalam satu domain, terlebih dahulu saya jelaskan dulu bagaimana sebenarnya yang saya alami.

Ceritanya, klien saya sudah memiliki website perusahaan berbasis Laravel. Klien ingin saya menambahkan fitur blog atau portal berita di websitenya. Lantaran saya kurang paham dengan Framework Laravel dan klien ingin selesai dengan cepat, saya tawarkan menggunakan WordPress untuk mengakomodir kebutuhan tersebut. Klien setuju.

Baca Juga : Perbaiki Thumbnail Gambar Bermasalah Setelah Ganti Template WordPress

Jadi Framework Laravel sudah terinstall dan jalan di root domain utama dan saya akan menambahkan WP di sub directory. Sehingga blog atau portal berita dari klien tersebut dapat diakses di namadomain.com/blog. Bukan sub domain. Oh ya, hosting web yang dipakai adalah shared hosting.

Oke lanjut ke bagaimana konfigurasi .htaccess untuk bisa menjalankan WP dan Laravel di satu domain. Pertama-tama seperti inilah pengaturan .htaccess yang digunakan oleh Framework Laravel untuk menjalankan website utama. File .htaccess ini berada di folder root atau public_html/. Jangan salah, karena file ini juga ada di dalam folder atau sub folder yang ada.

<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
    Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access 1 month"
    ExpiresByType image/jpeg "access 1 month"
    ExpiresByType image/gif "access 1 month"
    ExpiresByType image/png "access 1 month"
    ExpiresByType image/x-icon "access 1 month"
    ExpiresDefault "access 1 month"
</IfModule>

<IfModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_dechunk Yes
    mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
    mod_gzip_item_include handler ^cgi-script$
    mod_gzip_item_include mime ^text/.*
    mod_gzip_item_include mime ^application/x-javascript.*
    mod_gzip_item_exclude mime ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* -

# Redirect Trailing Slashes If Not A Folder…
# RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} (.+)/$
#RewriteRule ^ %1

# Handle Front Controller…
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php


# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
<IfModule php5_module>
   php_flag asp_tags Off
   php_flag display_errors Off
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit 256M
   php_value post_max_size 32M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php56"
   php_value upload_max_filesize 32M
   php_flag zlib.output_compression On
</IfModule>
# END cPanel-generated php ini directives, do not edit
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^ahcc\.co\.id$
RewriteRule ^/?$ "https\:\/\/ahcc\.co\.id\/" [R=301,L]

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php70” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php70 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

Dari informasi yang saya dapatkan pengaturan .htaccess untuk Laravel dibuat untuk memaksimalkan hosting agar Laravel dapat berjalan dengan baik, termasuk untuk pembacaan folder ataupun sub folder. Skrip .htaccess di mengunci semua folder hanya untuk Laravel. Saat kita berusaha menambahkan folder baru, folder tersebut tidak akan bisa diakses sampai kita membuat konfigurasi untuk folder yang kita buat.

Agar instalasi WP yang ada di dalam folder baru dapat terbaca oleh web server maka kita harus memberikan akses ke folder tersebut dan menambahkannya ke konfigurasi .htaccess yang ada. Caranya adalah dengan menambahkan skrip RewriteCond $1 !^(nama_folder) di bagaian mod_rewrite.c setelah skrip RewriteEngine On seperti di bawah ini (baris 32). Dalam kasus saya, saya gunakan nama folder blog.

<filesMatch ".(css|jpg|jpeg|png|gif|js|ico)$">
    Header set Cache-Control "max-age=2592000, public"
</filesMatch>
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access 1 month"
    ExpiresByType image/jpeg "access 1 month"
    ExpiresByType image/gif "access 1 month"
    ExpiresByType image/png "access 1 month"
    ExpiresByType image/x-icon "access 1 month"
    ExpiresDefault "access 1 month"
</IfModule>

<IfModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_dechunk Yes
    mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
    mod_gzip_item_include handler ^cgi-script$
    mod_gzip_item_include mime ^text/.*
    mod_gzip_item_include mime ^application/x-javascript.*
    mod_gzip_item_exclude mime ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    RewriteCond $1 !^(blog)

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* -

# Redirect Trailing Slashes If Not A Folder…
# RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} (.+)/$
#RewriteRule ^ %1

# Handle Front Controller…
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php


# BEGIN cPanel-generated php ini directives, do not edit
# Manual editing of this file may result in unexpected behavior.
# To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
# For more information, read our documentation (https://go.cpanel.net/EA4ModifyINI)
<IfModule php5_module>
   php_flag asp_tags Off
   php_flag display_errors Off
   php_value max_execution_time 30
   php_value max_input_time 60
   php_value max_input_vars 1000
   php_value memory_limit 256M
   php_value post_max_size 32M
   php_value session.gc_maxlifetime 1440
   php_value session.save_path "/var/cpanel/php/sessions/ea-php56"
   php_value upload_max_filesize 32M
   php_flag zlib.output_compression On
</IfModule>
# END cPanel-generated php ini directives, do not edit
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^ahcc\.co\.id$
RewriteRule ^/?$ "https\:\/\/ahcc\.co\.id\/" [R=301,L]

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php70” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php70 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

Apakah konfigurasi ini hanya berlaku untuk install WordPress di sub directory? Bukan untuk sub domain? . Meskipun saya belum coba untuk sub domain menurutku konfigurasi ini juga akan bekerja untuk install WP di sub domain juga. Kenapa? Karena pada dasarnya walaupun install untuk sub domain, intinya tetap sama. Bagaimana tetap folder tempat file WP berada dapat diakses oleh web server. Dan caranya dengan memberikan akses untuk folder di konfigurasi file .htaccess.

Sedikit tentang file .htaccess. File ini merupakan file konfigurasi yang berjalan di website untuk mengatur beberapa konfigurasi Apache Web Server. File .htaccess dapat digunakan untuk mengubah konfigurasi seperti mengaktifkan dan menonaktifkan fungsionalitas yang berjalan, melakukan redirect, mengatur ulang URL, memproteksi direktori menggunakan password, proteksi hotlink, memblokir IP tertentu, mengganti zona waktu, melakukan redirect, dan masih banyak yang lainnya.

TINGGALKAN KOMENTAR

Silakan masukkan komentar anda!
Silakan masukkan nama Anda di sini