ugrás a tartalomhoz

ie 9 JS, CSS include és a szép urlek

therest · 2013. Jan. 16. (Sze), 18.14
Sziasztok!

Problémám akadt a js, css használatnál IE9 alatt.

Van a következő htaccess sorom:

RewriteRule ^details/?(.*)?/?$ details.php?id=$1
HTML headerben ezek említendők:

<base href="/">
<link href="css/style.css?v=1357649753" rel="stylesheet" type="text/css" />
<script src="js/details.js?v=1357574123"></script>
A probléma, hogy a fenti htaccessel, headerrel css fájlokra invalid MIME típust ír. A js fileban azonnal pedig hibát jelez a developer tools, már az 1 soron.

Ha a sima url-t hívom (valami.hu/details.php?id=100) akkor simán működik, ha szép url-t (valami.hu/details/100) akkor jönnek a hibák.

Firefox, és Chrome alatt gond nélkül megy minden, csak ie 9 alatt történik mindez.
Olvasgattam pár helyen de nem nagyon találtam igazán jó infót.
Valakinek van tippje?
 
1

AddType text/css

Karvaly84 · 2013. Jan. 16. (Sze), 18.32
AddType text/css .css

elvileg
2

A probléma az, hogy az URL-ek

Poetro · 2013. Jan. 16. (Sze), 18.53
A probléma az, hogy az URL-ek relatívak, azaz a /details alatt fogja keresni a CSS fájlokat, ezért meg lesz hívva a details.php fájl, és onnantól kezdve az fogja kezelni a CSS-ed. A /css/style.css?v=1357649753-nek működnie kellene, hasonlóan a JS esetén is.
3

Több érdekesség is van

therest · 2013. Jan. 17. (Cs), 10.43
Több érdekesség is van itt.
Pl, hogy a szép url esetén miért invalid a mime típus, hogy lehet köze ennek az urlhez.
És főleg, hogy jelezhet hibát a javascriptek első karakterén.

Poetro: Nem az általad írt dologra szolgálna a <base href="/"> ?

Ráadásul mint írtam a többi böngészőben kifogástalanul működik, még ie 10 alatt is, csak 9es alatt (és gondolom régebbi verziók) nem.
4

base href

szabo.b.gabor · 2013. Jan. 17. (Cs), 10.49
ie9 base href problem

stackoverflow mindig a barátod

maga a kérdező meg is adja rá a választ. egyrészt a base href mókának az elején kell lenni, másrészt valami UTF-8 BOM van nagy valószínűséggel a php fájlodban.

amúgy ha van rá mód szerintem használj abszolut url-eket, és akkor kihagyható ez a base href dolog.

a css és js fájlok után a GET paraméter gondolom a cache-elést hivatott kivédeni. nem biztos, hogy minden esetben működni fog.

csináld inkább valahogy így:
RewriteRule ^\d+/(css|js|images)/(.*)$ $1/$2
és ekkor az /1/css/index.css átirányítódik a /css/index.css fájlra. ha változik a szám, tuti letölti a böngésző. arra figyelj, hogy ha a css-ben használsz képeket, akkor azokat ../images eléréssel add meg és így a képeket is letölti újra. és indokolatlanul ne változtatgasd a számot (ne a timestamp legyen az értéke).
5

Köszi a tippet, de nincs bom

therest · 2013. Jan. 17. (Cs), 12.12
Köszi a tippet, de nincs bom a php-ben, megnéztem többször is.
Abszolút url-ekhez csak akkor nyúlnék ha semmi más nem marad.
A css/js url-eknél természetesen csak fejlesztési időben van timestamp, production környezetben a tényleges verzió kerül a query stringbe.

Az a fura, hogy nem csak egy url van a htaccesben átírva, hanem többnél is alkalmazom a szabályt, és csak azoknál rendelkezik a gond ahol a komplexebb az url.
A következő htaccess esetén:

RewriteRule ^about/?(.*)?/?$ about.php
RewriteRule ^details/?(.*)?/?$ details.php?id=$1
http://valami.hu/about - simán lerendereli, js működik
http://valami.hu/details/100 - itt megfő, se css, js hibák
6

Nem nagyon értem a variálást

inf · 2013. Jan. 17. (Cs), 16.03
Nem nagyon értem a variálást a relatív url-ekkel, de ezt inkább rád hagyom. A másik gond, hogy rossz a regex, amit írtál, a .*-ba beletartozik a / is, szóval vagy .*? kellene, amit nem biztos, hogy támogat a mod rewrite, vagy valami konkrétabb, mondjuk \d+ .