Htaccess, RewriteRule

Htaccess, RewriteRule
2015-06-26T22:59:05+02:00
2015-07-03T14:37:10+02:00
2022-08-01T17:00:26+02:00
thisisti
Sziasztok!

Azt szeretném elérni, hogy az oldal elérhető legyen kiterjesztés nélkül, illetve html kiterjesztés esetén irányítsa át a kiterjesztés nélküli oldalra.

Egyelőre a következő a htaccess fájl tartalma:
RewriteEngine On RedirectMatch 301 (.*)\.html$ http://probalgatasok.net16.net$1 RedirectMatch 301 (.*)\.htm$ http://probalgatasok.net16.net$1 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
Az utolsó sort kéne megreparálni:
Ha van ugyanolyan nevű mappa és .php kiterjesztésű fájl ( pl: "i" mappa és i.php fájl ), akkor az url végére tesz egy / jelet, és a mappában keres egy ".php" nevű fájlt ( i/.php ).

Szóval mivel kéne kiegészíteni, hogy ne foglalkozzon a mappával, hanem a mappa nevével egyező .php kiterjesztésű fájlt nyissa meg?

Köszönöm előre is a segítséget!
Mutasd a teljes hozzászólást!
Lehet, hogy ennyi is elég lenne:

RewriteRule ^(.*)/$ /$1.php [L]
Tehát ha az url http://valami.hu/blog és van egy blog nevú mappád is, akkor blog.php-t fog kereseni.
Mutasd a teljes hozzászólást!

  • A társ fórum(prog.hu) talán előbb találsz választ.
    Mutasd a teljes hozzászólást!
  • Ott Árnyék moderálta, mert szerinte ez nem a programozáshoz tartozik.
    Azt mondta, tegyem fel itt a kérdést.
    Mutasd a teljes hozzászólást!
  • Talán ez segíthet...
    Ránézésre már majdnem kész vagy a feladattal.

    RewriteCond %{REQUEST_FILENAME}\.php -f
    Mutasd a teljes hozzászólást!
  • Nem értem... mindenhol a RewrieCond -ot kapom válaszul...
    Millióképp fel lehet tenni az elágazás feltételt, de nem azzal van a baj!!!

    Az utolsó sor:

    RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]
    Ez függetlenül attól, hogy fájlt vagy mappát talál, azt kéne keresnie, hogy "megadotturl.php".
    Ehhez képest, ha talál mappát, akkor elé tesz egy / jelet: "megadotturl/.php".
    Ez nekem nagyon nem jó, és nem értem, hogy mit nem lehet ezen érteni...

    Több szerveren is próbáltam, és ugyan ezt csinálták máshol is.

    Tud valaki segíteni?
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
  • Nem igazán találtam megoldást ezzel a kód generátorral a problémámra.
    Te milyen kódot tudtál vele készíteni, ami megoldás lehetne?
    Mutasd a teljes hozzászólást!
  • Egyelőre egy kis kerülő megoldást találtam ki:
    RewriteEngine On RedirectMatch 301 (.*)\.html$ http://dom.com$1 RedirectMatch 301 (.*)\.htm$ http://dom.com$1 RedirectMatch 301 ^/(.*)aaa(.*)\/$ /$1aaa$2_segednev RewriteCond %{REQUEST_URI}\.php !-f RewriteRule ^([^.]+)_segednev$ $1.php [NC,L] RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)$ $1.php [NC,L]

    Ezzel az oldal kap egy "segédnevet" az url végére. (kivéve, ha a fő könyvtárra hivatkozunk)
    Ez jól jöhet, ha kereső optimalizálni akarjuk az oldalt egy szóra.
    Hátrányos lehet, ha könnyen megjegyezhető url címekhez akarjuk rendelni a könyvtárakat.

    Hátránya, hogy minden mappát fel kell sorolni a negyedik sorral, ami a fő könyvtárban van.


    Van ötlet, hogy hogyan lehetne elhagyni a "_segednev" részt?
    Vagy hogy lehet megoldani, hogy ne kelljen felsorolni az összes főkönyvtár beli mappát?
    Mutasd a teljes hozzászólást!
  • Lehet, hogy ennyi is elég lenne:

    RewriteRule ^(.*)/$ /$1.php [L]
    Tehát ha az url http://valami.hu/blog és van egy blog nevú mappád is, akkor blog.php-t fog kereseni.
    Mutasd a teljes hozzászólást!
  • Igen, próbálkoztam hasonlóval, de így meg a fő könyvtárral is gondok lesznek:
    http://valami.hu címet beírva a http://valami.hu.php oldalt próbálná betölteni
    Mutasd a teljes hozzászólást!
  • Valami ilyesmi lett belőle:

    RewriteEngine On RedirectMatch 301 (.*)\.html$ http://dom.com$1 RedirectMatch 301 (.*)\.htm$ http://dom.com$1 RewriteCond %{REQUEST_URI}\.php !-f RewriteRule ^([^\.]+)/$ $1.php [L] RewriteCond %{REQUEST_FILENAME}\.php -f RewriteRule ^([^\.]+)$ $1.php [L]

    Viszont furcsa, hogy ha kiteszem a .php kiterjesztést az url-ben, akkor minden rendben van, viszont ha elhagyom, nem találja a css fájlokat...
    Viszont a lokális hivatkozások nem romlanak el a linkeknél...

    Van erre valami magyarázat?
    Mutasd a teljes hozzászólást!
  • Ha elhagyod .php-t , akkor lehet, hogy ráillik valamelyik szabály css-re is. Nézd meg, hogy böngésző forrásnézetében mit nyit meg, ha rányomsz a style.css(vagy amid van) linkre.
    Mutasd a teljes hozzászólást!
  • Elnéztem, a hivatkozások sem jók. Ha van a php fájllal megegyező mappa, elromlik a lokális linkelés.
    Az a gond, hogy ha van a php-val megegyező mappa, akkor a címsorban az url végére tesz egy / jelet.
    A RewriteCond megmondja neki, hogy ez esetben is a php-t nyissa meg, de a lokális hivatkozásokra úgy tekint, mintha a php-val megegyező nevű mappában lennénk.
    Pl:
    Az url: "a/b/c/"
    A fájl, amit megnyit: "a/b/c.php"
    "../d.php" -re hivatkozva: "a/b/d.php" urlt-t nyitja meg (ahelyett, hogy az "a/d.php" -t nyitná)

    Mit kéne javítani?
    Mutasd a teljes hozzászólást!
  • Szerintem inkább írd le, hogyan is kéne ezt az egészet elképzelni, mert így  nehéz szülés lenne.
    Például /a/b/d-ből hogy lesz /a/d.php - stb?
    Mutasd a teljes hozzászólást!
  • sajat.url/a/a.php
    sajat.url/a/b/s.php
    sajat.url/a/b/c/b.php

    Gondolom én. De lehet, hogy tévedek.
    Mutasd a teljes hozzászólást!
  • Az a/b/c.php oldalon van egy hivatkozás: href="../d.php".
    Ez normális esetben egy könyvtárral feljebb keres e d.php fájlt: a/d.php.

    Viszont, ha az url-ben a/b/c/ van, hiába az a/b/c.php oldalt tölti be, a hivatkozások rajta eltolódnak.
    Úgy tekint rá, mintha a/b/c/index.php , vagy valami hasonló lenne megnyitva, így az a/b/d.php-re hivatkozik, ami helytelen.

    a/b/c végére azért tesz egy / jelet, mert a/b mappában van egy c nevű mappa is, nem csak c.php fájl.

    Így érthető?
    Mutasd a teljes hozzászólást!
  • Én a .htaccess macera helyett a weblap motort venném rá, hogy keresőbarát url-eket generáljon. Sokkal tisztább és szárazabb érzés.
    Mutasd a teljes hozzászólást!
  • Nincs semmilyen weblap motor.
    Egy olyan honlap átalakításáról van szó, ahol több mint 10 000, kézzel szerkesztett html oldal van.
    Az oldalak php kiterjesztésűek lesznek, de minden fájl megmarad, csak apróbb változtatások lesznek bennük.
    Azért kell meghagyni az összes fájlt, mert nem igazán egységes a felépítésük. Amennyire bírom, automatizálva egységesítem őket, de ennyi fájlnál folyton találok meglepetéseket.
    Mutasd a teljes hozzászólást!
  • Akkor lehet, hogy itt van az ideje, hogy beüzemelj egy könnyen kezelhető cms-t.  Nem a legjobbak az ilyen előre legyártott cms-ek, de jobb mint amivel most szenvedsz. A WP tudja kezelni a statikus oldalakat, így akár behúzhatod őket a jelenlegi formájukban, vagy akár átalakíthatod dinamikus lapokká is őket.

    Drupal keményebb dió, de sokkal több lehetőséget nyújt mint a WP.
    Mutasd a teljes hozzászólást!
  • Dolgoztam mindkettővel.
    Jelenleg az oldal nagyon gyors: csak le kell tölteni a html dokumentumot, míg egy cms lelassítaná.
    Nem lesz dinamikus egy oldal attól, hogy behúzod wp-be.
    Az oldal menüje összetettebb, és nem is minden oldalon ugyanaz, és van, ahol javításra is szorul, amit automatizálva érdemes átnézni. Ekkora adathalmaznál kézileg nem is lehetne.
    Minden oldalt reszponzívvá kell tenni, ami nem oldódik meg azzal, ha csak cms-re behúzom. (drupal amúgy is csak a 8-as verziótól ad nagyobb figyelmet a reszponzivitásra, az pedig még csak béta verzióként van)
    A táblázattal formázott oldalakat div-esre kell átalakítani.
    Az oldalak linkelését se baj, ha újra generáltatjuk, hisz html oldalakra vannak hivatkozva.
    Stb...

    Szóval jócskán bele kell nyúlni az oldal kódjába, és újra elmenteni a fájlokat.
    Az egészet automatizáltam, úgyhogy már csak el kell indítgatni, és tesztelni, hogy minden oldalra jól illeszkednek-e a minták, amiket kitaláltam.

    Van még sok indok, ami a keretrendszerek ellen szól az oldal átalakítása kapcsán, meg még sok más dolgot is át kellett alakítani az oldalon, de ezekre nem térnék ki...

    Már csak apró simítások vannak hátra, az átadásra készülök, nem a lehetőségek felmérésénél tartok.

    A keresőbarát url benne sincs a megrendelésben, csak nekem szúrta a szememet, hogy nincs megoldva az oldalon, így ezen úgysem múlik az átadás.

    Ennek ellenére szívesen keresőbaráttá alakítanám az url-eket. A kihívás adott, nem szeretek neki hátat fordítani.
    Mutasd a teljes hozzászólást!
  • Itt van egy viszonylag egyszerű motor, ami kezeli a problémádat is.
    Mutasd a teljes hozzászólást!
  • Akkor ebben az esetben szerintem a legtisztább, ha simán átirányítod(R) böngészőt a megfelelő php-re.
    Mutasd a teljes hozzászólást!
  • Az átirányítással nincs problémám.
    Azt szeretném megoldani, hogy a címsorban ne szerepeljen a kiterjesztés.
    Mutasd a teljes hozzászólást!
  • Elég gyatra megoldás az esetemre az a megoldás, hogy egy tömbbe tárolni az összes megnyitható oldalt, készíteni kell hozzá karbantartó programot...
    Nem akarok a tulajra semmilyen karbantartó munkát bízni, legfeljebb annyit, hogy csináljon biztonsági mentéseket új tartalom felrakása után.
    Nekem nem feladatom a karbantartás, a tulajdonos akarja végezni. Egy idős, webfejlesztéshez annyit értő embernek, aki össze tud rakni html oldalakat grafikus szerkesztőben, arra nem bízunk karbantartói feladatokat.
    Nem is beszélve arról, hogy ha vannak külső oldalak (és vannak), amik hivatkoznak a honlap egyes oldalaira, azok átirányítását nem akarom még pluszban kezelni.
    Amúgy meg, meg van tervezve, hogy hogyan működjön az oldal, úgyhogy azon ne agyalj.
    Mutasd a teljes hozzászólást!
  • A lényeg az, hogy az lesz a böngésző számára az aktuál elérési út, amit címsorában látsz.

    Tehát ha /a/b/d/-t adsz meg neki, akkor az lesz aktuális neki - ha létezik, ha nem.
    Ha /a/b/d-t (záró / nélkül)  adsz meg és d mappa nem létezik, akkor /a/b/ lesz az aktuális.
    Mutasd a teljes hozzászólást!
  • De én azt akarom, hogy ha /a/b/d elérési utat adok meg, ne törődjön azzal, hogy d mappa létezik-e, hanem mindenképp d.php fájlt akarja betölteni.
    Ehhez képest, ha létezik a d mappa, a címsor végére rak egy / jelet automatikusan.
    Mutasd a teljes hozzászólást!
  • Persze, megnyitja a /a/b/d.php-t, csak azt írtad, hogy abban vannak relatív hivatkozások, amik /a/ mappára mutatnának elvileg (../ miatt).

    Ha betöltődik az oldal, akkor a relatív linkjeid az  /a/b/d/ mappából indulnak ki.

    <a href="../c">link</a>
    Ebből lesz egy /a/b/c - és nem /a/c
    És ez teljesen független attól, hogy az apache melyik fájlra irányítja át a kérést - belsőleg.
    Mutasd a teljes hozzászólást!
  • Talán azért nem működik a rewriterule, mert teljesen hibás az oldalszerkezet, hibás a linkelési stratégia és nem tud alkalmazkodni a relatív útvonalakhoz. Mondom én, hogy ezt nem foltozgatni kellene, hanem egy normális tartalomkezelőbe átrakni mindent.

    De te tudod. Ezt a megoldást már lesöpörted az asztalról. Pedig ez volna a legegyszerűbb és leggyorsabb. Persze a negatív gondolkodásmódodat látva ("...ezt nem lehet..., ...ez nem jó..., ...ez nekem nem megfelelő..."), te nem a hiba, vagy inkább jelenség megoldására törekszel, hanem arra, hogy minél több kifogást találj arra, hogy miért nem jó a jó megoldás.
    Mutasd a teljes hozzászólást!
  • Egyetlen érvet nem hoztál fel, hogy miért jobb az, amit te ajánlottál.
    Fel is kell mérni a lehetőségeket, mielőtt belevágsz valamibe, nem csak elkezdeni használni valamit, mert úgy szokták.
    Számításba jött a te megoldásod is, mikor felmértük a feladatot.
    Nem ismered, milyen elvárások vannak a munkáról, ezért egy kicsit megmutattam belőle, hogy ne erőltessed már azt, ami alkalmatlan a feladatra.
    Nem fogom utólag átalakítani az egészet csak azért, mert egy fórumon látatlanba ahhoz ragaszkodik valaki.
    Amit erőltetsz, lassítana az oldalon, megbonyolítaná a karbantartást, és több dologba is bekavarna.
    Mellette csak annyi szól, hogy keresőbarát url-eket készít...
    Ennél már a 2015.06.28. 17:18-as megoldásom is jobb.

    Ja, és hiába kérlek, hogy a kérdésemre válaszolj, mindenképp más megoldások után nézel.
    A rewriterule meg működik, úgyhogy olvassad át rendesen a hozzászólásokat, ne csak úgy felületesen.
    Mutasd a teljes hozzászólást!
  • De azt szeretném, hogy ha beírom az url-be, hogy /a/b/d, ne irányítson át /a/b/d/ -re, (még akkor se, ha létezik ilyen mappa) és máris minden működne úgy, ahogy kell.
    Szóval még mindig ugyanaz a kérdés, mint a legelején, hogy a / jelet hogy tüntessem el a végéről?
    Mutasd a teljes hozzászólást!
abcd