Vypnutí Cache-Control pro 302 přesměrování (RewriteRule) v .htaccess
Dobrý den,
na doméně spintrace.com se snažím v .htaccess nastavit přesměrování na základě Accept-Language. Fungovat by to mělo takto:
GET https://www.spintrace.com/
-> pokud je Accept-Language „cs“, pak přesměruj (302) na https://www.spintrace.com/cs/ a necachuj toto přesměrování
-> pokud je Accept-Language „en“ nebo není poskytnut, pak přesměruj (302) na https://www.spintrace.com/en/ a necachuj toto přesměrování
+ jedno pravidlo na přesměrování HTTP -> HTTPS (může být cachováno)
Implementováno těmito pravidly:
RewriteEngine On Header always set Cache-Control "max-age=0, no-store, no-cache, must-revalidate" env=nocache Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache # Language based redirection RewriteCond %{REQUEST_URI} ^/$ [NC] RewriteCond %{HTTP:Accept-Language} ^cs [NC] RewriteRule (.*) https://%{HTTP_HOST}/cs/ [R,L,env=nocache:1] # if requesting root, but the above language didn't kick in, then redirect to default en RewriteCond %{REQUEST_URI} ^/$ [NC] RewriteRule (.*) https://%{HTTP_HOST}/en/ [R,L,env=nocache:1] # presmerovani na HTTPS RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L] Header set Content-Security-Policy "upgrade-insecure-requests;"
Pravidla mám na místě a fungují, problém je, že se mi do odpovědí plete odněkud Cache-Control header navíc, který způsobí cachování redirectů a tím pádem špatnou funkčnost (tento typ redirectu nemá smysl vůbec cachovat -> pro každého klienta bude jiný).
https://www.spintrace.com HTTP/1.1 302 Found Date: Tue, 18 Oct 2022 12:46:54 GMT Server: ATS Cache-Control: max-age=0, no-store, no-cache, must-revalidate Expires: Thu, 01 Jan 1970 00:00:00 GMT Location: https://www.spintrace.com/en/ Cache-Control: max-age=300 Expires: Tue, 18 Oct 2022 12:51:54 GMT Content-Length: 213 Content-Type: text/html; charset=iso-8859-1 Age: 0 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>302 Found</title> </head> <body> <h1>Found</h1> <p>The document has moved <a href="https://www.spintrace.com/en/">here</a>.</p> </body> </html>
V odpovědi je vidět, že mé nastavení cache Headerů se do odovědi přidá, ale odněkud se tam bere další sada cache headrů navíc. Zkoušel jsem cachování i úplně vypnout (viz návody zde na wedosu), ale vypnutí cache mi spolehlivě funguje pouze pro responsy 200 OK. Pro 302 responsy se tam někde natvrdo přidává cache control a vypnout vůbec nejde.
Prosím pomoc… už nevím co mohu udělat více…
Možná by šlo provést ten redirect přes PHP a nastavit headry tam, ale tomu bych se prozatím chtěl vyhnout, pokud to nebude potřeba.
1 Odpověď
Problém vyřešilo vypnutí proxy cache z naší strany.
Zpravidla stačí vypnutí proxy cache zadat v .htaccessu podle tohoto návodu, ale pokud toto řešení nefunguje, může cache vypnout či znovu zapnout podpora. Žádosti posílejte přes formulář, uveďte název webhostingu.