.htaccess mengabaikan RewriteCond

Oct 22 2019

Saya memiliki .htaccess berikut.

RewriteEngine On

# HTTPS redirect
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{THE_REQUEST} !^/robots.txt [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L] RewriteRule ^(.+)$  /index.php [L,QSA]

Bagian utama adalah pengalihan HTTPS. Saya tidak ingin mengalihkan robots.txt ke https, tetapi

RewriteCond %{THE_REQUEST} !^/robots.txt [NC]

selalu diabaikan dan robots.txt juga dialihkan ke https.

Tahu apa yang salah?

Jawaban

anubhava Oct 22 2019 at 10:50

Kondisi ini akan selalu mengembalikan nilai salah:

RewriteCond %{THE_REQUEST} !^/robots.txt [NC]

Itu karena jangkar awal ^sebelumnya /karena nilai contoh THE_REQUESTadalah:

GET /index.php?id=123 HTTP/1.1

Jadi ubahlah kondisi Anda menjadi ini:

RewriteCond %{THE_REQUEST} !^[A-Z]{3,}\s/+robots\.txt\s [NC]

dan tes ulang di browser baru.