gambar situs wordpress hilang setelah htaccess berubah
Saya memiliki instalasi wordpress di root dan satu lagi di subfolder di dalam root.
Yang biasanya terjadi adalah url akan terlihat seperti:
https://example.com/quotes/us/some-url
tapi saya ingin menghapus 'tanda kutip' dari url sehingga hanya berakhir seperti:
https://example.com/us/some-url
Terima kasih kepada pengguna stack overflow lainnya, saya bisa membuatnya berfungsi dengan kode htaccess di bawah ini tetapi saya tidak menyadari bahwa gambar sekarang tidak muncul dan saya mendapatkan kesalahan 404 untuk semuanya. Ini adalah file root .htaccess
RewriteRule ^[a-z]{2}/ quotes%{REQUEST_URI} [L]
# BEGIN rlrssslReallySimpleSSL rsssl_version[3.3.5]
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
# END rlrssslReallySimpleSSL
# 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 /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
dan subfolder 'quotes' .htaccess terlihat seperti ini
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule (.*) /$1 [R=301,L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /quotes/ RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /quotes/index.php [L]
</IfModule>
# END WordPress
Jawaban
Saya mendapatkan kesalahan 404 ke jalur ini
https://example.com/wp-content/themes/theme_quotes/style.css?ver=1.0.0
. Jadi, ini mencari di instalasi root di mana tema itu tidak ada karena hanya ada di instalasi subdirektori
Saat ini, kami hanya menulis ulang permintaan ke /quotes
subdirektori ketika jalur URL dimulai dengan kode bahasa 2 huruf, karena itulah satu-satunya hal yang tampaknya membedakan URL di antara dua pemasangan WordPress. Namun, itu berarti URL ke sumber daya statis Anda (seperti di atas) yang tidak memiliki awalan kode bahasa (dan tidak merujuk /quotes
subdirektori secara langsung) tidak sedang ditulis ulang sehingga gagal dengan 404.
Ini mungkin bisa diperbaiki di WordPress, dengan memasukkan /quotes
URL ke sumber daya statis Anda. Tapi itu mengekspos /quotes
subdirektori untuk siapa saja yang melihat sumber HTML Anda. Kita juga perlu memodifikasi arahan pengalihan dalam /quotes/.htaccess
file untuk mencegah permintaan ini diarahkan kembali ke root. EDIT: Sebenarnya, sepertinya ini terjadi dengan gambar Anda yang sudah menyertakan jalur URL lengkap ("benar").
Apa yang bisa kita lakukan ... di .htaccess
file root , tulis ulang permintaan apa pun untuk sumber daya statis (gambar, file CSS atau JS) ke /quotes
subdirektori jika tidak ada di root. Sebagai contoh:
# Rewrite any URLs that contain a language code prefix to the subdirectory
RewriteRule ^[a-z]{2}/ quotes%{REQUEST_URI} [L]
# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(css|js|png|jpg|webp|gif)$ quotes%{REQUEST_URI} [L]
# BEGIN WordPress
# : (Remainder of existing .htaccess file goes here)
Ini berarti bahwa jika Anda memiliki dua sumber daya statis dengan nama yang sama (jalur URL dasar yang sama) di kedua penginstalan, maka yang ada di penginstalan root akan "menang".
Perhatikan bahwa ini adalah penulisan ulang "buta" ... jika sumber daya statis tertentu tidak ada di kedua penginstalan, Anda akan selalu mendapatkan 404 saat /quotes
penginstalan. Tetapi tidak ada cara untuk benar-benar menyelesaikannya karena ada elemen ambiguitas dalam struktur jalur URL.
DAN, di dalam /quotes/.htaccess
file , cegah permintaan langsung apa pun untuk sumber daya statis agar dialihkan kembali ke root. Sebagai contoh:
# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for static resources
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !\.(css|js|png|jpg|webp|gif)$ RewriteRule (.*) /$1 [R=301,L]
# BEGIN WordPress
# : (Remainder of existing .htaccess file goes here)
Saya berasumsi semua ekstensi file Anda (ke sumber daya statis) adalah huruf kecil.
Anda perlu membersihkan cache browser Anda, karena image redirect kembali ke root kemungkinan besar telah di-cache oleh browser (karena ini adalah 301 - permanen - redirect).