Redirect http ke https tidak berfungsi pada subdir di mana instance WordPress lain diinstal

Sep 23 2020

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?

  1. Saya pikir arahan di `.htaccess diwarisi oleh subfolder, mengapa tidak berfungsi untuk / blog /?
  2. 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

1 MrWhite Sep 27 2020 at 02:55

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.