ugrás a tartalomhoz

.htaccess RewriteRule, de hogyan

newyorkerboy · 2010. Szep. 12. (V), 10.07
Üdv!
A következőt szeretném megvalósítani:
Van egy könyvtár-struktúrám, valahogy úgy, hogy a főmappán belül egy mappában vannak a PHP és JS fájlok, egy másikban a képek, és ezekre a PHP-kban ../-el hivatkozok.
A scriptek is a ../ eléréssel működnek, elég macerás lenne átírni mindenhol.
A konkrét probléma tulajdonképpen az lenne, hogy jelenleg www.tárhely.hu/layout címen tudom elérni az oldalt, ezen a mappán kívül, de azonos szinten vannak mappákban a szükséges fájlok, és nyilván nem tudom egy szinttel feljebb tenni a többi mappát, hogy megmaradjanak a működő hivatkozások, mert az már a public_html mappán kívül lenne.

.htaccess segítségével megoldható-e az, hogy tulajdonképpen minden www.tárhely.hu/valami-t www.tárhely.hu/layout/valami-nek értelmezzen? (Keresőbarát URL-t használok.)

Remélem, nem túl könnyű kérdés, én a .htaccess-el még eléggé hadilábon állok.
Köszönöm a segítséget előre is!
 
1

Valahogy így

newyorkerboy · 2010. Szep. 12. (V), 12.48
Valahogy így kellene csinálnom?

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^localhost:85/oldal [NC] 
RewriteRule ^(.*)$ http://localhost:85/oldal/layout/$1 [L,R=301]
2

talán így

csman007 · 2010. Szep. 12. (V), 13.28
#a filetípusok amin nem hajtódik végre a rewriterule.
RewriteRule ^index\.php|style.css|img\.png$ - [L]

#a a könyvtárak amin nem hajtódik végre a rewriterule.
RewriteRule ^(images|js|css)(/.*)?$ - [L]
3

Egész könyvtárat

janoszen · 2010. Szep. 12. (V), 20.42
Én a helyedben egész könyvtárat vennék ki a Rewrite-ból, tehát nagyjából így:

RewriteEngine On
RewriteCond !^/static/
RewriteCond !^/(favicon\.ico|robots\.txt|...)
RewriteRule .* index.php [L]


Ez valószínűleg a legkönnyebben lekövethető és bővíthető, a RewriteRule-ok használata RewriteCond nélkül sokszor hosszú debug folyamatokat okozhat.

Ha van lehetőség, fontold meg azt is, hogy esetleg az összes statikus tartalmat valami külön aldomainre tedd, ami gyorsítani fogja az oldal betöltését. Ha konfigurálható a szervered, környezeti változóként (tehát getenv-vel lekérhetően) megkaphatod a statikus szerver címét és így még nem is kell szívni a fejlesztőkörnyezetben.
4

Nem tudom

newyorkerboy · 2010. Szep. 13. (H), 19.00
Én ezt nem értem.
Utána olvastam, már értem, hogy egyáltalán miket írtatok a válaszokban, és úgy kb. a működését is.

Szerintem nekem a
RewriteCond %{HTTP_HOST}
helyett
%{REQUEST_URI} vagy %{REQUEST_FILENAME} kellene.
Ez tulajdonképpen ahhoz kell, hogy megnézzük, mikor ne irányítson át.
Szóval ha az url-em már eleve http://www.oldal.hu/layout akkor ne irányítson a http://www.oldal.hu/layout/layouta.

Ez viszont valamiért nekem nem működik, mert az eddigi 500-as hiba helyett most http://www.oldal.hu/layout/layout/layout/layout.../kért_oldal címre irányít át.

Pillanatynilag ez a kód:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ^localhost:85/oldal/layout$ [NC]
RewriteRule ^(.*)$ http://localhost:85/oldal/layout/$1 [L,R=301]
Mi nem jó? :(
5

Szezont a fazonnal

janoszen · 2010. Szep. 13. (H), 20.37
Keverednek a dolgok nálad. A REQUEST_FILENAME a fájlrendszer-beli fájlra vonatkozik, abba nem írhatsz localhostot. Egyáltalán nem is tudsz a teljes URL-re matchelni, hanem külön kell a HTTP_HOST-ra RewriteCond-ot írnod és a REQUEST_URI-ra.