Warum funktioniert HTACCESS RewriteCond %{HTTP_COOKIE} nur für PHP und nicht für HTML?

Warum funktioniert HTACCESS RewriteCond %{HTTP_COOKIE} nur für PHP und nicht für HTML?

Ich habe versucht, alle direkten Zugriffe in meinem Unterordner mit diesem Code umzuleiten

RewriteEngine on

RewriteCond %{HTTP_COOKIE} !user_cookie=[^;]
RewriteRule .* http://webhost.org/ [R=301,L]

Mir ist klar, dass es nur für OHP-Dateien funktioniert hat, nicht aber für andere Dateien wie HTML. Ich habe versucht, auf den Link zur PHP-Datei zuzugreifen, und es funktioniert wie geplant, aber wenn ich auf die andere Datei mit der .htmlErweiterung zugreife, erfolgt keine Umleitung, als ob die Bedingung von ignoriert würde .htaccess.

Ich bin neu bei .htaccess. Was mache ich falsch?

Serverinformation:

  • Neuinstallation von Vestacp
  • Apache/2.2.15 (CentOS 6 x64)

Antwort1

Der von Ihnen gepostete Code gilt nicht unbedingt für „direkte“ Anfragen. Er gilt, wenn kein Cookie gesetzt ist (d. h. nicht im CookieHTTP-Anforderungsheader zurückgesendet wird) – das ist nicht dasselbe. (Vermutlich setzen Sie ein „Sitzungs“-Cookie? Die Definition einer „Sitzung“ in den Browsern variiert jedoch, sodass diese Cookies letztendlich mehr sein könnenhartnäckigals Sie erwarten.)

Wenn es „nur für PHP-Dateien funktioniert, aber nicht für andere Dateien wie HTML“, dann liegt es daran, dass der Browser den CookieHTTP-Anforderungsheader für Anfragen an Ihre PHP-Dateien nicht sendet – aus irgendeinem Grund. Vielleicht sind die PHP-Dateien „falsch“ und der Cookie:Header sollte gesendet werden – wie bei HTML-Dateien?

Der Unterschied zwischen Ihren PHP- und HTML-Dateien könnte auf das Caching, die Domäne und/oder den URL-Pfad zurückzuführen sein. Dies hat nichts mit Ihrem .htaccessSkript zu tun.

Um auf „direkten Zugriff“ zu prüfen, ist es üblicher, nach einem leeren RefererHeader zu suchen. Diese (und jede andere) Methode, die Sie verwenden, ist jedoch nicht ganz zuverlässig.

verwandte Informationen