Cegah direktori admin mengalihkan menggunakan aturan penulisan ulang url

Oct 30 2020

Pengaturan di bawah ini bekerja dengan sangat baik tetapi jika saya mencoba untuk pergi ke https://example.com/quotes/wp-adminitu mengarahkan saya ke hal https://example.com/wp-adminyang tidak saya inginkan terjadi karena sekarang saya tidak pernah bisa masuk ke /quotes/situs WordPress.

Saya mencoba menambahkan ini ke kutipan .htaccess tetapi tidak membantu:

RewriteCond %{REQUEST_URI} !^/(wp-admin/.*)$

Saya juga mencoba menambahkan baris berikut ke .htaccessfile di wp-adminfolder tetapi juga tidak berhasil.

RewriteEngine Off

.htaccessFile root :

# 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|svg|ttf|woff2)$ 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>
<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

/quotes .htaccess mengajukan

# 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|svg|ttf|woff)$ 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

2 MrWhite Oct 30 2020 at 17:00

Saya mencoba menambahkan ini ke kutipan .htaccesstetapi tidak membantu:

RewriteCond %{REQUEST_URI} !^/(wp-admin/.*)$

The REQUEST_URIvariabel server berisi penuh URL-jalan, jadi ini harus /quotes/wp-admin(yaitu regex. !^/quotes/wp-admin- membuntuti slash sengaja dihilangkan). Akibatnya, pengecualian di atas akan gagal dan pengalihan akan tetap terjadi.

Anda juga dapat menambahkan .phpke daftar ekstensi yang harus dihindari. Atau bahkan mengecualikan permintaan apa pun yang sepertinya memiliki ekstensi file - dengan asumsi URL halaman Anda tidak memiliki "ekstensi file".

Misalnya, di /quotes/.htaccess:

# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for wp-admin and static resources
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/quotes/wp-admin
RewriteCond %{REQUEST_URI} !\.\w{2,4}$ RewriteRule (.*) /$1 [R=302,L]

\.\w{2,4}$- ini mengasumsikan bahwa ekstensi file terdiri dari sebuah titik diikuti oleh antara 2 dan 4 karakter dalam kisaran a-z, A-Z, 0-9atau _(garis bawah) dan akhir URL-jalan. \wadalah kelas karakter singkatan yang mewakili rentang karakter tersebut.

Anda juga dapat mengambil langkah lebih jauh dan mencegah permintaan apa pun yang memetakan ke file fisik sedang diarahkan, meskipun pengecualian di atas untuk !^/quotes/wp-admin/dan !\.\w{2,4}$seharusnya sudah menangkap semuanya . Sebagai contoh:

# Redirect any direct requests for "/quotes/<anything>" back to root
# Except for wp-admin, static resources and any other files
RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^/quotes/wp-admin RewriteCond %{REQUEST_URI} !\.\w{2,4}$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /$1 [R=302,L]

Pemeriksaan sistem file (seperti -f) relatif "mahal", jadi sebaiknya dihindari jika tidak benar-benar diperlukan.

Saya juga mencoba menambahkan baris berikut ke file .htaccess di folder wp-admin tetapi juga tidak berhasil.

RewriteEngine Off

Ini seharusnya berhasil - setidaknya mencegah pengalihan yang dipicu oleh .htaccess. (Meskipun ini akan mencegah penulisan ulang juga, jadi mungkin tidak diinginkan?)

Namun, karena ini adalah pengalihan 301 (permanen), ini akan di-cache (secara persisten) oleh browser. Jadi, Anda perlu memastikan cache browser dibersihkan sebelum pengujian.

Uji dengan 302 pengalihan (sementara) hingga semuanya berfungsi sebagaimana mestinya untuk menghindari kemungkinan masalah cache.


Selain: Di .htaccessfile root Anda :

# 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|svg|ttf|woff2)$ quotes%{REQUEST_URI} [L]

Poin kecil, tetapi Anda direferensikan di woff2sini, tetapi woffdi /quotes/.htaccessfile Anda . Idealnya, keduanya harus sama. Anda bisa menggeneralisasi ini, seperti yang disebutkan di atas untuk /quotes/.htaccessfile. Sebagai contoh:

# Rewrite any request for a static resource that does not exist (in the root)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.\w{2,4}$ quotes%{REQUEST_URI} [L]