ugrás a tartalomhoz

Barátságos URL, de nem mod_rewrite

newyorkerboy · 2010. Júl. 16. (P), 19.31
Üdv!
Barátságos url-t kellene készítenem, a lehetõ leggyorsabban. Tudom, hogy a tökéletes megoldás az Apache mod_rewrite, de nincs rá lehetõségem és idõm, hogy olyat írjak.
Azt gondoltam, átnevezek minden fájlt kiterjesztés nélkülire, .htaccess-bõl rákényszerítem az Apache-ot, hogy PHP-ként értelmezze õket, ezen kívül lenne majd egy ErrorDocument 404 kezelõ a végén.
Na, a helyzet az, hogy van egy adatlap.php, ami két elemmel hívódik meg (jobb esetben), ezek alapján mySQL-bõl kérdezek le, és a visszatért adatok építik fel az oldalt, képeket tölt be, stb.
Az url így nézne ki: adatlap/szallas/nap+hotel.
Ebbõl az adatlap a kiterjesztés nélküli adatlap.php, az url többi része pedig ?caller=szallas&item=nap+hotel.
Csakhogy, a fenti esetben a képeket, css-t, a scriptet és mindent az adatlap/szallas/prog+hu+hotel mappából akar betölteni. (Ami persze nem létezik.)
Ezt hogy lehet kiküszöbölni? Tákolásos módszerrel minden src elé betudok szúrni egy "../../" stringet, de azért ez elég gáz lenne. Nem lehet betöltés után valahogy befolyásolni a REQUEST_URI-t?

Olvastam a cikket itt a weblaboron, de nem találtam választ benne. Egyébként valami hasonlót akarok megvalósítani, mint ami ott van, a mod_rewrite előtt.

Köszönöm a segítséget elõre is!
 
1

abszolút cím?

solkprog · 2010. Júl. 16. (P), 19.47
Miért nem abszolút címet adod meg a css/képek/stb nek? például: http://domain.hu/css/basic.css
2

Akár

newyorkerboy · 2010. Júl. 16. (P), 19.53
Hát, akár jó is lehetne. De érdekelne, hogy ezen kívül nincs-e más, szerver oldali megoldás erre.
3

CSS, stb

janoszen · 2010. Júl. 16. (P), 21.23
Nem tudom, hogy kérdés volt-e, de a következőkre érdemes figyelni:

  • Statikus tartalmakat lehetőleg abszolut hivatkozással adj meg. Vagy delegálj neki külön domaint (ez a legjobb), vagy add meg a domain névhez képest per jellel kezdődően ( /media/css/style.css ). Ezt nem nagyon érdemes kikerülni mert csak a szívás lesz a vége.
  • A későbbi hanyattszop@s elkerülése érdekében (elnézést), könyvtár szinten válaszd el a statikus tartalmakat a PHP-s alkalmazástól. Ha lehet, a statikus tartalmak betöltési helye jöjjön valami konfigurációból, hogy könnyű legyen mozgatni.
  • Ha esetleg fölmerült volna benned, a statikus tartalmakat nem szeresd PHP-ból kiszolgálni, mert akkor elesel a webszerverben beállítható funkcióktól (mint pl a sendfile) amik nagyban meggyorsítanák a kiszolgálást. (Akár több százszoros is lehet a különbség.) PHP-ból CSS-t generálni elsőre jó ötletnek tűnik, de nem skálázódik jól. Ha feltétlenül ilyet szeretnél, akkor inkább élesítéskor generáld le a CSS-t.


Most, hogy ezen túl vagyunk, lássuk a megoldást a rewrite-os problémára:
  • Minden oldalra gyártasz egy könyvtárat, bele egy index.php fájlt és levan a gond róla. Fatengelyes és nem skálázódik, de megoldás.
  • Elolvasod a témáról a megfelelő Weblaboros cikket és az ott található megoldások egyikét alkalmazod. Rewrite esetén kiveszed RewriteCond-al a media könyvtáradat.


Remélem, sikerült alaposan körüljárni a témát.
11

Statikus fájlok kiszolgálása

Max Logan · 2010. Júl. 20. (K), 21.23
Lenne kedved/időd/energiád egy blogbejegyzés vagy rövidebb cikk keretében értekezni a statikus fájlok kiszolgálásáról?

Mint rendszergazda tudnád ismertetni, hogy mi jó a szervernek és hozhatnál jó, kevésbé jó és rossznak ítélhető példákat is, stb (pl. mi az ami még elmegy kis terhelésnél és mit csináljunk helyette, ha jön a nép).

Azt hiszem sokak számára érdekes és hasznos írás lenne.
4

404

newyorkerboy · 2010. Júl. 17. (Szo), 18.18
Egy szó, mint száz, abszolút útvonalat fogok használni.

Akkor, a történet második fele: 404 error esetén hogy tudom a felhasználót átirányítani tetszöleges fájlra?
Ha aposztrófok közé rakok szöveget a .htaccess fájlban, akkor müködik, de ha fájlnevet rakok oda, akkor nem.

Nem lehet, hogy be kell állítanom valamit az Apacheban?
5

ErrorDocument

janoszen · 2010. Júl. 18. (V), 01.13
Nem fajlnevet kell megadnod, hanem egy eleresi utat. Tehat ha http://example.com/errors/404.html cimen lakik a hibafajlod, akkor /errors/404.html nevet kell megadnod.
6

base tag

gex · 2010. Júl. 18. (V), 03.45
nezz utana a base tag-nek. az a megoldas. nem kell se kulon domain, se perjel minden url elejere, se abszolut url http-vel.
7

Hát

newyorkerboy · 2010. Júl. 18. (V), 16.02
Hát, lehet hogy ha ez nekem eszembe jut, jobban járok. Mostmár a cookiek hatókörével is szívok. :/

Azért köszi, szerintem ezt most eléggé megjegyzem ahhoz, hogy legközelebb gondolkodás nélkül ezt használjam.
8

Hali, én a következőt

mahoo · 2010. Júl. 19. (H), 20.46
Hali, én a következőt használom, lehet, hogy nem tökéletes megoldás, de nekem eddig bevált:

- htaccess-szel megoldva, hogy minden url esetén egy adott domain-en belül az index.php fusson le
- az index.php elemzi az url-et (www.valami.hu/hirek.html) és az alapján (hirek.html) pl. egy 'oldalak' nevű táblából kiolvassa a megfelelő tartalmat
- ha nincs adott url-ű rekord, akkor 404.html tartalma töltődik be


Szóval ennyi :)
9

Üdv! Már nagyjából minden úgy

newyorkerboy · 2010. Júl. 20. (K), 20.11
Üdv!
Már nagyjából minden úgy működik, ahogy szerettem volna, egy apróságot leszámítva: ha nem .htaccess fájlból kezelem a 404-es hibát, hanem mondjuk mySQL-ből vissza adott érték alapján akarom eldönteni, hogy jó-e vagy nem a lekérés, ugyanúgy akarom az error.php-t megjeleníteni! Ha header location-el átirányítom, akkor a böngésző címsorában is átíródik az URL, míg .htaccess átirányításnál nem! Lehetséges a .php futása közben tetszőlegesen 404-es hibát kiváltani, és ha igen hogy? (Gondolom header-el, de mit írjak bele?)

A másik dolog, hogy ezt a .htaccess-t hogyan lehet rövidebbre szabni, egybe vonni a ForceType-okat?

<Files "index">
ForceType application/x-httpd-php
</Files>

<Files "error">
ForceType application/x-httpd-php
</Files>

<Files "bejelentkezes">
ForceType application/x-httpd-php
</Files>

<Files "regisztracio">
ForceType application/x-httpd-php
</Files>

<Files "adatlap">
ForceType application/x-httpd-php
</Files>

<Files "adatlap_maps">
ForceType application/x-httpd-php
</Files>

<Files "hirbekuldes">
ForceType application/x-httpd-php
</Files>

<Files "kepbekuldes">
ForceType application/x-httpd-php
</Files>

<Files "videobekuldes">
ForceType application/x-httpd-php
</Files>
10

Szandekos?

janoszen · 2010. Júl. 20. (K), 20.46
Te mondd, szandekosan szivatod magad? Ez a forcetype a letezo legrosszabb megoldas. A SEF URLekre a Rewrite a megoldas, minden mas csak a webszerver rendszergazdaknak szant funkciokeszletevel valo visszaeles ami elobb-utobb a fejedre borul. Ha a szolgaltatod nem tamogat rewriteokat, valts masikra.

A 404es problemadra az a megoldas, hogy az osszes lekerdezes egy PHPba fut ra, ahol mondjuk configbol eldontod, hogy letezik-e.
12

a

newyorkerboy · 2010. Júl. 25. (V), 18.54
Nem, igazából azért nem használhatok mod_rewrite-ot, mert nem tudom használni a regexpet.
Azért köszi a segítséget(?).
13

tanuld meg

solkprog · 2010. Júl. 25. (V), 19.00
Szerintem jobban jársz ha most rászánsz 2-3 órát hogy a regexp alapjait megtanuld (vagy még ennyi se kell, mert össze lehet google-zni mod_rewrite-okat barátságos url-re), mindsem hogy most ráépíts egy alkalmazást egy gány (bocs) megoldásra.
A regexp-et úgyse tudod a szakmában sokáig még kikerülni... Szal hajrá.
14

Olvasnivaló

janoszen · 2010. Júl. 25. (V), 21.21
Nade kérem, a nem tudásra nem az a megoldás, hogy megpróbálod faékkel megoldani, abból jó nem lesz. Ihun egy kis olvasni való:



A fenti kódod kiváltását például a következő képpen lehetne intézni:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(index|error|...)$
RewriteRule . index.php [L]