ugrás a tartalomhoz

.htaccess, JS/CSS/stb. figyelmen kívül hagyása

Dualon · 2007. Szep. 28. (P), 18.51
Szerver (@home :): Apache 2.2.3, Ubuntu 7.04
.htaccess a gyökérkönyvtárban, tartalma:
<IfModule mod_rewrite.c>
	RewriteEngine on
	#RewriteOptions MaxRedirects=10
	
	RewriteRule \.(ico|js|css|gif|jpe?g|png)$ - [L]

	RewriteCond %{REQUEST_FILENAME} !-f
	#RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
Cél: barátságos webcímek, a domain.hu/valtozik/ezis címet a rendszer domain.hu/index.php?q=valtozik/ezis-ként kapja meg.

Probléma: a fenti a domain.hu/valtozik esetén jó is, de ha domain.hu/valtozik/ezis (tehát nem "első szint") a cím, akkor a CSS és a JS állományokat, melyek a ./skins/ könyvtárban vannak, a szerver a domain.hu/valtozik/ezis/skins/style.css-ként (.js, stb.) keresi. Képekkel nincs gond.

A kívánt működés az lenne, hogy a háttérben dolgozó rendszer megkapja $_GET['q']-ra a paramétereket, de minden egyéb állomány esetén az Apache érintetlenül hagyja az eléréseket.

Utánaolvastam a témának:
  • Apache mod_rewrite doksi,
  • Weblabor kereső .htaccess kulcsszóval,
  • Google a .htaccess, JS, CSS, redirect, mod_rewrite, és még egy pár másik kulcsszó igen változatos kombóival


Nyilván valahol le van írva, de a téma irodalma annyira gazdag, hogy képtelenség áttekinteni.
Elnézést kérek, tudom, hogy sokszor volt a téma, de egyszerűen nem jövök rá, mi a megoldás.
 
1

/ jel

Thoer · 2007. Szep. 28. (P), 23.49
kezdd egy / jellel a külső állományok elérését pl.

<link type="text/css" href="/fresh/screen.css.m.css" />
vagy adj meg egy base url-t a htmlben. (doksi: http://www.w3schools.com/tags/tag_base.asp )
2

Mindkettő megtörtént már

Dualon · 2007. Szep. 29. (Szo), 01.16
Köszönöm a választ! Mea culpa, elfelejtettem megírni, hogy a base url szerepel az XHTML headben, illetve minden külső állományra ./ kezdettel, vagyis a gyökértől hivatkozom. / esetén már a "könyvtárfa első szintjén" sem jó a stíluslapok (és a JS) linkelése.
3

base tag

Fraki · 2007. Szep. 29. (Szo), 04.32
Base tagileg tanácsos óvatosnak lenni:

	<!--[if IE 6]>
	 	<base href="<?= $baseURL ?>/"></base>
	<![endif]-->
	<!--[if !IE 6]><!-->
	 	<base href="<?= $baseURL ?>/" />
	<!--<![endif]-->
Egyébként szerintem mutass problémás példalinket, add meg annak a fájlnak a fizikai helyét, add meg a doc root fizikai helyét, és írd le, van-e még máshol is .htaccess-ed, akkor mindenki okosabb lesz. És add meg, pontosan mi van a base href-edben.
4

Demo

Dualon · 2007. Szep. 29. (Szo), 13.57
Köszönöm a base-es ötletet, nem ismertem, de beépítettem. Változás semmi.

A demo elérhető a http://e-arc.hu/weblabor/mrt/ címen. A http://e-arc.hu/weblabor/mrt/proba jól példázza, mi a probléma: a /proba még jó, a Próba aloldala linkre kattintva azonban elszáll a formázás.

.htaccess a http://e-arc.hu/weblabor/mrt/ könyvtárban, tartalma:

<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteOptions MaxRedirects=10
	# RewriteBase http://e-arc.hu/weblabor/mrt/
	
	RewriteRule \.(ico|js|css|gif|jpe?g|png)$ - [L]

	RewriteCond %{REQUEST_FILENAME} !-f
	# RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
Ha a RewriteBase http://e-arc.hu/weblabor/mrt nincs kikommentelve, Error 500-at dob a szerver.
Az éles környezet a nyitóbejegyzésben vázolthoz képest Debian alapon fut, de más különbség - tudomásom szerint - nincs.

Access.log alapján a szerver CSS, JS esetén is az átírt URL-eken keresi a file-okat, rewrite.log csak lokálból van, de nem igazodok ki rajt (lekérésenként is eléggé bőbeszédű már loglevel 3 esetén is, csak külön igényre varázsolnám fel).
Szerk.: .htaccess máshol nincs.

Könyvtárstruktúra:
mrt/
  sys/
    innen húzkod be dolgokat az index
  skins/
    mrt/ (más név esetén is hiba van, mindegy a fenti mrt-vel való egyezés)
      css.mrt.css
      (más stíluslapok, képek, template-ek, stb.)
  others/
    JS-ek
  labels/
    nyelvi file-ok
  index.php
  .htaccess


Hálásan fogadnék minden segítséget, mert tényleg nem jövök rá, mi a gond.
5

base tag helye

Fraki · 2007. Szep. 29. (Szo), 18.17
A base taget az szkriptek és css-ek elé tedd a headben.

Ennek a sornak
RewriteRule \.(ico|js|css|gif|jpe?g|png)$ - [L]

nincs sok haszna, ez
RewriteCond %{REQUEST_FILENAME} !-f

már megteszi helyette is, amit kell.

A RewriteBase-t akkor kellene használni, ha a szájt fizikai elérése más, mint ami az url-ből látszik, de tudtommal nem ez a helyzet, tehát fölösleges. (BTW a te esetedben a default értéke /weblabor/mrt (végeperjel nélkül), tehát ezzel vszleg ugyanígy működne.)
6

Megoldódott

Dualon · 2007. Szep. 29. (Szo), 19.35
A base taget az szkriptek és css-ek elé tedd a headben.


Döbbenet. Látszik, hogy belekockultam már a témába, szégyellem ezt a banális hibát. Tiéd a pont, úgy tűnik, ez volt a megoldás. :)
Hirtelen persze érthetővé válik az is, hogy a képek miért működtek (gy.k. azok már a base után voltak...).

A mod_rewrite-ot nem ismerem eléggé biztosan ahhoz, hogy ne akartam volna explicit kizárni a RewriteRule-lal a CSS, JS, stb-t. RewriteBase hasonló eset, de tanultam mindkettőből.

Köszönöm a segítséget!