Vill du göra en redirect eller en omskrivning? Din nuvarande regel är en omskrivning, (rewrite) vilket gör att den när du fixar komma åt någon sida där .htaccessen ligger, så skickar servern istället tillbaka sida 2. Det vill säga, adressen i adressfältet förändras inte. En redirect å andra sidan gör att servern ber webbläsaren att ladda en annan sida. För att göra en sådan, lägg till R=301 till argumentet. Detta är att rekommendera om sidan ligger på en annan domän.
RewriteRule .* [url]http://www.redirecthere.com/[/url] [R=301,L]
Men det behöver nödvändigtvis inte vara anledningen till att det inte funkar. Till att börja med så är det möjligt att både Safari och Chrome matchar din regel ovan, eftersom en modern version av Chrome innehåller en sådan sträng. Min Chrome user agent innehåller Safari/537.36 t ex.
Det finns en annan sak att ta hänsyn till här, för att förvirra saker ytterligare, nämligen cachen. Normalt sett frågar webbläsaren servern när en vissa sida uppdaterades senast. Låt oss säga att du senaste uppdaterade filerna i ordningen, först CSS'en, sedan upgrade.html sedan index.html (t ex). Du besöker sidan en gång i dess normaltillstånd, och webbläsaren (Safari i detta fall) sparar respektive datum i sin cache.
Nu lägger du till reglerna i din .htaccess och besöker framsidan. Safari ber om senaste datum för index.html. Utan att Safari vet något om det svarar servern med datumet för upgrade.html (pga rewriten). Eftersom det datumet är äldre så väljer Safari att inte ladda om hela sidan från servern.
Safari frågar sedan om CSS-filen. Av samma anledning som ovan svarar servern med datumet för upgrade.html (återigen utan att Safari vet om att datumet tillhör upgrade.html). Eftersom datumet för upgrade.html är nyare än datumet för CSS-filen så väljer Safari att ladda om CSS-filen. Men pga rewriten får Safari tillbaka en HTML-fil istället för CSS-filen, och alltså visas sidan utan CSS.
Chrome istället valde att ladda om framsidan och visade upgrade.html istället för index.html.
Jag vet inte exakt om det gick till så, men det är den bösta förklaringen jag kan komma på. Prova att ladda om sidan i Safari och se om du ser upgrade.html.
Ett sätt att komma runt problemet är att inte göra omskrivningen för statiska filer. Du kan antingen lägga all statiska filer i samma katalog, eller matcha på filändelse.
Om alla statiska filer ligger i samma katalog:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} Safari/[5] [NC]
RewriteCond %{REQUEST_URI} !^/static/ [NC]
RewriteRule .* [url]http://www.redirecthere.com/[/url] [L]
eller baserat på filändelse:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} Safari/[5] [NC]
RewriteCond %{REQUEST_URI} !\.(js|css|gif|png|jpe?g)$ [NC]
RewriteRule .* [url]http://www.redirecthere.com/[/url] [L]
Utropstecknet negerar matchningen.