gambar situs wordpress hilang setelah htaccess berubah

Oct 29 2020

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

3 MrWhite Oct 29 2020 at 18:12

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 /quotessubdirektori 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 /quotessubdirektori secara langsung) tidak sedang ditulis ulang sehingga gagal dengan 404.

Ini mungkin bisa diperbaiki di WordPress, dengan memasukkan /quotesURL ke sumber daya statis Anda. Tapi itu mengekspos /quotessubdirektori untuk siapa saja yang melihat sumber HTML Anda. Kita juga perlu memodifikasi arahan pengalihan dalam /quotes/.htaccessfile 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 .htaccessfile root , tulis ulang permintaan apa pun untuk sumber daya statis (gambar, file CSS atau JS) ke /quotessubdirektori 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 /quotespenginstalan. Tetapi tidak ada cara untuk benar-benar menyelesaikannya karena ada elemen ambiguitas dalam struktur jalur URL.

DAN, di dalam /quotes/.htaccessfile , 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).