ugrás a tartalomhoz

Szépített webcímekkel nem találja a képeket, CSS-t

pixelsys · 2005. Okt. 5. (Sze), 11.51
Sziasztok,

Régóta szeretném kipróbálni a mod_rewrite adta lehetőségeket, és ehhez nagyon jó forrásnak tűnik a cikk a weblabor.hu-n. A feladat nagyon egyszerű lenne, azt szeretném, ha bármilyen URL-t, ami nem file vagy könyvtár azt egy $_GET típusú változóban az index.php-nek adna át az Apache. Megjegyzem, hogy egyelőre csak windowson probaltam ki, localhoston, ahol alkönyvtárban van a projekt.

A .htaccess file:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ index.php?qs=$1 [L]
</IfModule>
A dolog odáig teljesen jól működik, ameddig nem tartalmaz a REQUEST_URI slash-t, tehát pl http://localhost/projekt/menupont. Amint megjelenik benne a slash, a kepek es a CSS nem jelenitodik meg. Például:

http://localhost/projekt/menupont/
http://localhost/projekt/menupont/almenupont
http://localhost/projekt/menupont/almenupont/

stb. RewriteBase nem számított.
 
1

base href

Hojtsy Gábor · 2005. Okt. 5. (Sze), 11.59
Hát a böngésző az aktuális webcímet veszi alapnak a relatívan megadott képekhez és egyéb fájlokhoz, ha te másképp nem rendelkezel. Egyrészt megadhatsz olyan eléréseket a képeknél, hogy
<img src="/projekt/images/..." alt="..." />
így akkor a domain gyökeréből veszi a dolgokat a böngésző, persze akkor a projekt-nek mindig benne kell lennie a címben. Vagy megteheted, hogy beállítod a base href-et, és ahhoz képest adod meg a címeket:
<head>
...
<base href="http://localhost/projekt/" />
...
</head>
...
<img src="/images/..." alt="..." />
Ilyenkor persze minden webcím, link, kép, CSS, JavaScript, stb. hivatkozás, ami relatív, az adott base értékhez képest számolódik.
3

megfejtés

pixelsys · 2005. Okt. 5. (Sze), 12.27
Igen, ez, hogy az src-t /-sel kezdjem ez megoldásnak tűnik. A base href-es dolog alapvetően jó gondolat, csak XHTML Strict-ben nem szabványos.

Köszönöm a másik észrevételt a fájlok és könyvátarak létezésével kapcsolatban. Természetesen akkor szeretném, ha nem valódi fájl könyvtár.
5

hogy ne lenne szabványos?

Hojtsy Gábor · 2005. Okt. 5. (Sze), 12.56
Benne van az XHTML 1.0 Strict DTD-ben a base elem, ahogy a fenti példában használtam.
2

Nem létezik

Poetro · 2005. Okt. 5. (Sze), 12.07
És ha azt tesztelnéd, hogy nem létezik?
azaz:
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?qs=$1 [L,QSA]
</IfModule>

--------
Poetro
4

mégsem

pixelsys · 2005. Okt. 5. (Sze), 12.44
Hát ez érdekes. Nem tudom mi történt egy "darabig" jó volt, aztán megint nem.
Ugyanazt a jelenséget produkálja, amit leírtam a téma megnyitásakor. Ha a képet a "/image/kep.jpg" formában próbálom meg elérni akkor nem találja, csak, úgy, hogy "image/kep.jpg".
6

Avagy...

Anonymous · 2005. Okt. 5. (Sze), 13.10
En mindig ./images/kep.jpg hivatkozassal csinalom es soha semmi baj nem volt vele.
7

alakul

pixelsys · 2005. Okt. 5. (Sze), 13.35
Sikerült megoldani a dolgot, bár enyhe kompromisszummal.

Így néz most ki a .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?qs=$1 [L,QSA]
</IfModule>

Amit leszűrtem, hogy a RewriteCond-nál az [OR] nem kell. Akkor a létező alkönyvtárak sem működnek.

A HTML-ben a <base>-t be kell állítani, a <head> részben még a CSS előtt. Fontos, hogy ez /-re (slash) végződjön.
<base href="http://localhost/projekt/" />


Ezek után lehet hivatkozni a képekre és a css fájlokra:
<link rel="stylesheet" type="text/css" href="style/screen.css" />
<link rel="stylesheet" type="text/css" href="./style/screen.css" />
<img src="/images/image.jpg" alt="" />
<img src="./images/image.jpg" alt="" />

Formában fogadja el, ha /-el (slash) kezdődik, tehát a gyökérre próbál hivatkozni, akkor nem jó.

Remélem másnak még hasznosak lesznek ezek a tapasztalatok.
8

.htaccess

Anonymous · 2005. Okt. 5. (Sze), 19.52
Én ilyet használok:
AddType application/x-httpd-php .php .phtml
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule !\.(txt|ico|gif|jpg|png|css|js|html|phtml|swf)$ index.php
</IfModule>

Ez a szabály azt csinálja, hogy a felsorolt kiterjesztésű file-okon kívül mindent az index.php-ra irányít.
A phtml azért van benne, hogy ha mégis van olyan php file, amit nem kell RerwriteRule-olni, akkor phtml kiterjesztést adunk neki.

Gyulus