Redirect http ke https tidak berfungsi pada subdir di mana instance WordPress lain diinstal
Saya telah menginstal dua contoh WordPress, https://www.example.com/dan satu subdirektorihttps://www.example.com/blogs/
Sekarang untuk membuat semua URL HTTP dialihkan ke versi HTTPS, saya menambahkan arahan berikut di .htaccessfolder root, sebagai berikut:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301,NC]
Ini berfungsi untuk semua URL di bawah folder root, kecuali yang di bawah /blogs/subfolder.
Saya mencoba memodifikasi bagian .htaccessbawah /blogs/dengan menambahkan arahan di atas lagi. Tapi itu tidak berhasil. Mengapa?
- Saya pikir arahan di `.htaccess diwarisi oleh subfolder, mengapa tidak berfungsi untuk / blog /?
- Haruskah saya mengubah arahan menjadi:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/blogs/$1 [L,R=301,NC]
Sebenarnya saya sudah mencoba melakukannya, tapi tidak berhasil juga.
Memperbarui:
Sekarang izinkan saya memberikan contoh untuk menjelaskan hal ini dengan lebih jelas:
Untuk URL seperti http://www.example.com/outlook-repair/, itu DAPAT diarahkan ke versi https https://www.example.com/outlook-repair/dengan benar.
Namun, untuk URL di bawah /blogs/subfolder, seperti http://www.example.com/blogs/2-useful-methods-to-recover-outlook-data-from-a-damaged-disk-image-file, TIDAK DAPAT dialihkan ke versi https, sebaliknya, yang Anda dapatkan masih versi HTTP. Itulah masalahnya.
Memperbarui
Di bawah ini adalah /blogs/.htaccess, untuk mempermudah, saya telah menonaktifkan plugin WP Fastest Cache:
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blogs/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blogs/index.php [L]
</IfModule>
# END WordPress
# Wordfence WAF
<Files ".user.ini">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order deny,allow
Deny from all
</IfModule>
</Files>
# END Wordfence WAF
Perbarui 2
Saya telah mencoba menyetel opsi situs plugin Redirection untuk situs utama dan situs blog, seperti yang dijelaskan di https://redirection.me/support/site-options/ , ubt yang masih belum berfungsi juga.
Jawaban
Saya pikir arahan di
.htaccessdiwarisi oleh subfolder
Arahan mod_rewrite di .htaccessfile root tidak diwarisi oleh /blog/.htaccessfile (secara default). Anda perlu secara khusus mengaktifkan warisan mod_rewrite, namun, ini mungkin menambah kerumitan yang tidak perlu.
Saya mencoba mengubah .htaccess di bawah / blog / dengan menambahkan arahan di atas lagi. Tapi itu tidak berhasil. Mengapa?
Meskipun mod_rewrite inheritance diaktifkan, ini tidak akan berfungsi tanpa perubahan karena akan mengalihkan permintaan kembali ke root dokumen. Anda perlu memodifikasi direktif seperti yang Anda sebutkan (dengan menambahkan /blogssubdirektori di substitusi ), namun, ini akan merusak pengalihan untuk situs WordPress di root dokumen.
Sebagai gantinya, Anda perlu mengulangi pengalihan HTTP ke HTTPS di bagian atas /blog/.htaccessfile. Dan karena ini ada dalam subdirektori dan subdirektori tampaknya menjadi bagian dari jalur URL, akan lebih baik menggunakan REQUEST_URIvariabel server daripada untuk menghindari hardcode subdirektori dalam direktif (meskipun subdirektori di-hardcode di arahan nanti toh - ini bisa dihindari - tapi saya asumsikan dibuat oleh WordPress).
( Selain: Jika Anda benar-benar mengaktifkan mod_rewrite inheritance, Anda harus mengubah .htaccessfile root agar juga dapat digunakan REQUEST_URI. Namun, ini bukan satu-satunya hal yang perlu Anda ubah.)
Sebagai contoh:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,L]
The REQUEST_URIvariabel server berisi penuh, akar-relatif (dimulai dengan garis miring) URL-jalan.
The NCbendera berlebihan di sini.