Kezdőoldal » Számítástechnika » Weblapkészítés » PHP + htaccess rewriterule...

PHP + htaccess rewriterule megoldás/agyvérzés?

Figyelt kérdés

Kezd az agyamra menni ez a mocsadék .htaccess, mert szó szerint ezerféleképpen próbáltam, és sehogy nem akarja azt, amit én.


Így van felépítve az oldalam:

oldal.hu/index.php: a html keretnek, és az abban történő kiíratásra használom

oldal.hu/menu.php: létrehozza a menüelemeket a következő formátumban: oldal.hu/index.php?site=menuneve

oldal.hu/index2.php: $_GET['site'] alapján összeszedi adatbázisból a szükséges tartalmat


Ezt akartam megoldani rewriterule-al, hogy az URL így nézzen ki:

oldal.hu/menuneve

Ettől függetlenül a $_GET['site'] létezzen, és tudjam használni (az se gond, ha nem megoldható, a $_GET hiánya legyen a legkisebb baj).


A menük hivatkozását már megcsináltam az oldal.hu/menuneve változatra, de a .htaccess-be bármit rakok, vagy nem jön be egyáltalán semmi, vagy hibát jelez, vagy minden jó, csak épp nem jelenik meg se kép, se css, se semmi a sima szövegen kívül.


Jelenleg egy ilyet szedtem össze:

RewriteEngine on

# check that the request url is neither a file nor a directory

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/?$ /index.php?site=$1 [NC,L]


Most az a változat játszik, hogy:

- az oldal bejön így: oldal.hu/index/menuneve

- viszont nem az a tartalom, aminek kéne, mert a $_GET['site'] nem elérhető

- és a css, képek, stb. nem töltődnek be


Legnagyobb probléma az utolsó, mert ha GET nincs, azt legfeljebb megoldom az URL feldarabolásával, de azért a többi igazán sokat dobna az oldal hangulatán :)


Megköszönném a segítséget, mert már egyszerűen kiborít...



2015. ápr. 4. 13:23
 1/10 A kérdező kommentje:
Ja meg ugye az se lenne baj, ha az oldal.hu/index/menuneve helyett simán oldal.hu/menuneve is működne.
2015. ápr. 4. 13:33
 2/10 A kérdező kommentje:
.htaccess nélkül ugyanazt a hibát generálja, mint azzal. Na jó, feladom, rászokok a cigire...
2015. ápr. 4. 13:43
 3/10 A kérdező kommentje:

UPDATE:

Eljutottam odáig, hogy a következő .htaccess tartalommal az oldal.hu/menuneve/ megjeleníthető úgy, hogy a $_GET['site']-ot tudom használni:

<iFModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([\w\s\.\-\+]+)/(.*)$ index.php?site=$1 [QSA]

RewriteRule ^([\w\s\.\-\+]+)$ index.php?site= [QSA]

</iFModule>


# Force Trailing Slash

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301]

-----------------


Viszont ami még mindig probléma:

- / jel kötelező az URL végére (ezt küszöböltem ki a +3 sorral, viszont a "menu-neve" elemeknél nem működik)

- és a mellékletek így sem töltődnek be, mert a fájlokat a 'menuneve' mappában keresi, amit ha létrehozok, akkor már nem működik a .htaccess sem.


Ezt a / jeles dolgot feltételezem a .htaccess rule prefixben is meglehet adni, csak nem tudom hogy.

A mellékletekre még mindig nincs tippem. Találtam arra is millió megoldást neten, egyik se volt jó akkor, amikor belső hivatkozással akartam meghívni a fájlokat.


Külsővel még nem próbáltam.

2015. ápr. 4. 16:36
 4/10 A kérdező kommentje:

Köszönöm a gyors segítséget, így már sikerült megoldanom!


(aldomainen tárolom a fájlokat, és onnan hivatkozok rá,

a / jeles problémát header-el kiküszöböltem)

2015. ápr. 4. 20:55
 5/10 Drone007 ***** válasza:

Egy egyszerűbb rewriterule-val minden gondod megoldódott volna:

RewriteRule ^(.*)$ /index.php?site=$1 [L]


Ez úgy jelenik meg az oldalon, hogy minden oldal.hu/akarmi

hívásnál az akarmi bekerül a $_GET["site"] változóba. Ha a hívás oldal.hu/akarmi/barmi/valami, akkor a $_GET["site"] = "akarmi/barmi/valami" lesz.


Túlbonyolítottad :)


Kis help későbbre: [link]

2015. ápr. 5. 09:59
Hasznos számodra ez a válasz?
 6/10 A kérdező kommentje:

Köszönöm! :) Igazából a végleges .htaccess már máshogy néz ki:

RewriteEngine on

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([\w\s\.\-\+]+)/(.*)$ index.php?site=$1 [QSA]


# Force Trailing Slash

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^[^/]+$ %{REQUEST_URI}/ [L,R=301]

----


Viszont 1 problémám még mindig van, (amit az említett aldomaines megoldással küszöböltem ki), hogy a könyvtárakban lévő fájlokat nem érem el, mert ugye a .htaccess az oldal.hu/valami/ címet átirányítja, ezzel együtt a mappákban lévő fájlok helyei is módosulnak. Ezt pedig még külön PHP-ban lekezelni kicsit olyan lenne, mint ha a lábammal vakarnám meg a fülemet :D

Két tippem is volt, de így elméletben az egyik végtelen ciklust eredményezne, a másik pedig szimplán működésképtelenné tenné az oldalt :D Nem tudom az kivitelezhető-e, hogy a rewriterule elé írok kizárási kritériumokat (mappaneveket), és ha az megegyezik az oldalneve.hu/ utáni résszel, akkor nem hajtja végre az átirányítást.

Csak mert ha jól tudom, Last-ként megadva az 5. sor előtt, a fő átirányítás egyáltalán nem fog lefutni.

2015. ápr. 5. 19:53
 7/10 Drone007 ***** válasza:

Ebben a sorban:

RewriteRule ^([\w\s\.\-\+]+)/(.*)$ index.php?site=$1 [QSA]

Ez a rész:

([\w\s\.\-\+]+) teljesen felesleges. Csak annyit csinál, hogy az index.php elé még vár egy mappanevet, különben nem működik az index.php-d.

A trailing slash erőltetését meg felejtsd el. Ha van slash az url végén, akkor mindenképpen lesz GET, csak épp üresen, ami bezavarhat.


A beszúrandó objektumokhoz megfelelő url-eket kell használni. A gondod abból adódik, hogy eleve rossz mappában nyílik meg az oldalad (oldal.hu/valami/index.php?site=...), ezért az lesz az alap kiindulási pont. Az urlben az a "valami" rontja el az egészet.


Csinálhatod azt is, hogy abszolút url-eket használsz. Az oldal inicializáció elején konstansba töltöd a globális url-t, és azt használod a fájlok (css, js, egyéb php) beszúrásakor.

define("MYGLOBAL", " [link]

...

<link rel="stylesheet" type="text/css" media="screen" href="<?php echo MYGLOBAL ?>/css/style.css">

2015. ápr. 6. 10:10
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Köszönöm a tartalmas segítséget! :)

Igen, miután jó pár órát kínlódtam vele, már ráébredtem, hogy nem túl kedvező az a könyvtármegoldás, amit átirányítás mentes oldalaknál eddig alkalmaztam.


Egyelőre így marad, mert végül is baj nincs belőle, csak elég kacifántos. Ha lesz hozzá hangulatom, átpakolom egy mappába.

2015. ápr. 7. 09:46
 9/10 A kérdező kommentje:

A trailing slash-t pedig azért raktam bele, mert akkor bárhogy van beírva az URL, nem fog rá hibát dobni, de anélkül ha a végéről lemarad a / jel, egyből ugrik a 404.


Mindegy, ha szerinted nem szükséges, akkor kiszedtem.

2015. ápr. 7. 09:49
 10/10 A kérdező kommentje:

Ja és kipróbáltam mi történik, ha ezt leszedem az elejéről: ^([\w\s\.\-\+]+)

Végtelen átirányítás. Szóval ezt inkább megtartom :)

2015. ápr. 7. 09:53

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!