Eredmény: 1 - 2 (2) összesen

Téma: htaccess szabályok-> külön igen, együtt nem..

  1. #1
    Új tag
    Csatlakozott
    09-11-24
    Hozzászólás
    4
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás htaccess szabályok-> külön igen, együtt nem..

    Egy fotó galéria ajaxos programozását tanulom. Olyan kialakítást szeretnék, hogy minden kérést mondjuk a pretty_url.php dolgoz fel, miután a .htaccess fájl a beérkező kéréseket három változóba szortírozta: alkalmazás (például gallery, forum stb), eszerint include-al belinkeli a megfelelő php fájlt. A második változó az útvonal, a webgyökéren kívüli mappastruktúrának felel meg, és a navigációhoz kell. A kérések opcionálisan, ha mozaikképre kattintott az illető, valamilyen file kiterjesztéssel végződnek, ez kerül(het) a harmadik, a file változóba.
    A lentebbi megoldással kísérletezem, de biztosan valamit még tudnom kellene, mert "érdekes" eredményeket ad.

    1. A célmappában két php fájl van pretty_url.php és index.php, hogy lássam felismeri e, ha létező fájlra keresek.
    2. Ha a két RewriteRule bármelyikét #kikommentelem, akkor a változók értékeiben azt kapom, amit várok.
    3. Ha mindkét RewriteRule érvényben van, akkor teljesen hülyeséget kapok: application=pretty_url.php
    4. Ha csak az egyik RewriteRule működik, akkor be tudom hívni az index.php tartalmát. Tehát: domain.mysite.hu/index.php működik.
    5. Mindkét rule-nál nem az index.php hívódik meg, hanem a pretty_url.php a fentebbi értelmetlen eredménnyel. Nem értem miért jut el egyáltalán odáig, hogy az index.php meghívásakor egyáltalán a RewriteRule-okat alkalmazni akarja, hiszen a RewriteCond feltételekben ezt eleve kizártam..
    6. Amennyire sikerült felfognom: a last flag [L] azt jelenti, hogy ha az adott RewriteCond teljesül, akkor a REQUEST_URI -t addig próbálja hozzáilleszteni a regular expression mintákhoz, amíg sikerrel nem jár, aztán elvileg leáll. Ha az első - a fájlra vonatkozó keresés nem illeszkedik, csak az után léphetne a második, a csupa útvonalnevet takaró mintára. Nem? Ha kikommentelem (#...) a fájlos sort, akkor működik, ha nem, akkor meg miért nem ugyan azt adja, ha egyszer az első RewriteRule-ra meg nem illeszkedik?


    Kód:
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteOptions MaxRedirects=10
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/?([^/]+)((/[^/]+)*)/(\w+\.\w+)/?$ pretty_url.php?application=$1&path=$2&file=$4 [L]
    RewriteRule ^/?([^/]+)((/[^/]+))*/?$ pretty_url.php?application=$1&path=$2 [L]
    
    </IfModule>

    Tehát ha a pretty_url.php-ban simán kiíratom a név-érték párokat, akkor a következő eredményeket kapom, az alábbi linkre, ha csak az első RewriteRule aktív:
    domain.applications.mysite.hu/gallery/nature/fauna/elephant/baby.png
    application=gallery
    path=/nature/fauna/elephant
    file=baby.png

    Ha a második RewriteRule is aktív:
    application=pretty_url.php, file=

    A másik rule-al dettó ugyan ez a helyzet.
    Tud valaki egy kis inspirációt adni? (Tudom az egészet feldolgoztathatnám php-ban, de ha egyszer .htacces-ben is lehet..)



  2. #2
    Új tag
    Csatlakozott
    09-11-24
    Hozzászólás
    4
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: htaccess szabályok-> külön igen, együtt nem..

    Ok. Idő közben rájöttem, a megoldásra, ha valakit ez a későbbiekben érdekel:
    Kód:
    <IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteOptions MaxRedirects=10
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/?([^/]+)(.*)/(\w+\.\w+)/?$ pretty_url.php?application=$1&path=$2&file=$3 [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !\w+\.\w+/?$
    RewriteRule ^/?([^/]+)((/[^/]+)*)/?$ pretty_url.php?application=$1&path=$2 [L]
    </IfModule>
    A lényeg, hogy a RewriteConditions CSAK az őket követő egyetlen RewriteRule sorra vonatkoznak, ezért csak a fentiek szerint, ismétléssel tudtam megoldani a feladatot. Ez viszont működik.

    Másik megoldás: negatív lookahead-el a regexben addig lépegettetek előre és kiválasztok minden EGYES karaktert, amíg a feltétel igazzal tér vissza a következő karaktertől előre tekintve, aztán opcionálisan kiválasztom a file részt. Viszont ez .htaccess-ben nem működik, annak ellenére, hogy elvileg a regex jó. Ilyen a motor, úgyhogy ennyiben is hagytam.
    Kód:
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/?([^/]+)(((?!/\w+\.\w+/?$).)*)(/\w+\.\w+)?/?$ pretty_url.php?application=$1&path=$2&file=$4




A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •