Hogyan tudok többváltozós . Htaccess fájl-t készíteni?
Sziasztok!
Többváltozós URL -n keresztül $_GET segítségével szeretnék értékeket átadni a php nak.
De ezt úgy szeretném, hogy...
A tartalmi oldalakat:
Pl.: [link]
Míg a képgalériánál 2 változót olvastatok ki az url ből.:
Pl.: [link]
A jelenlegi .htaccess konfigom.:
<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteBase /
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*) index.php?oldal=$1 [QSA]
#RewriteRule ^(.*)/^(.*) index.php?oldal=$1&galeria=$2 [NC]
#RewriteRule ^(.*)/^(.*) index.php?oldal=galeria&album=$2
[NC]
</IfModule>
A kérdést zárva még egy kérdés, hogy mit jelent a sorok végén [NC] vagy [QSA] stb...
Köszönöm szépen a segítséget előre is!
1,akkor két külön szekció kell,azaz két RewriteCond, Rewriterule rész. Az egyik a galériához a másik meg a többihez.
2,
NC - kisbetű nagybetű nem számít a paraméternél
QSA - eredeti paramétereket hozzáadja az új url-hez (megmaradnak)
Az explode -vel egy a gond...Szépen végzi a dolgát ezzel nincs is gond, de amikor a második változót írom be az url be akkor fogja a design magát és mindenféle CSS -t eltávolít, így csak a puszta szöveg kerül kiírása.
De ha már
[link] /galeria
akkor már eltűnik mindenféle grafikai alkalmazás
Egy kicsi módosítottam a .htaccess -t és végtelen elemre kértem az URL olvasását.
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
PHP oldalon pedig.:
$URIszelet = explode("/", $_SERVER['REQUEST_URI']);
És kérdésekkel teli állok az esett előtt, hogy az első értéket szépen értelmezi, de utáni a többinél már nem dolgozik úgy ahogy kell.
Ilyen pl a többlépcsős RewriteRule használta is, ugyan úgy viselkedik ez esetben is.:
RewriteRule ^index\.php$ - [L]
RewriteRule ^(.+)/(.+)/(.+)/?$ index.php?par1=$1&par2=$2&par3=$3 [L]
RewriteRule ^(.+)/(.+)/?$ index.php?par1=$1&par2=$2 [L]
RewriteRule ^(.+)/?$ index.php?par1=$1 [L]
Nem lehet, hogy valami más is kiírása kerül a .htaccess ben ami ez megzavarja?
A php ben használok egy szűrőt str_replace mely a minta alapján megkeresi a css fájlokat és a képfájlokat, ennek az útvonalát módosítva tér vissza, de ezt a .htaccess esetén nem szereti, így elérhetetlenné teszi a php által generált elérési útvonalat. Ezért nem találtja meg.
De amikor az URL ben egy változó érték van akkor ez a hiba nem áll fent, egy vagy több változó esetén jelentkezik ez a "nem találom meg a php által generált útvonalat".
Egyszerű megoldás:
.htaccess
--
RewriteEngine on
# minden file es directory hivas eseten:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# minden hivast iranyits at az index.php-n, az egyebeket tedd requestbe:
RewriteRule ^(.*)$ index.php?x=$1 [L]
--
Az L flag azt jelzi, hogy ez az utolsó feldolgozandó szabály.
A fenti kód azt eredményezi, hogy minden hívás az index.php-ra fog érkezni valahogy így:
hívás: [link]
eredmény: [link]
hívás: [link]
eredmény: [link]
Vagyis az index.php kapni fog egy $_GET["x"] változót, amit már csak helyesen kell feldolgoznod.
Pl: $urls = explode("/",$_GET["x"]);
Az $urls tömb tárolja, hogy milyen hívás érkezett. Az első ($urls[0]) paraméter nyilván a hívott oldal, a többi az esetleges aloldal/oldalszám/album/cím ez már rajtad áll.
@Drone007
Az általad leírt módszer jó, én is e módszert alkalmaztam első körben, de ami a fő probléma, hogy miért akarja minden esetben a virtuálisan módosított eléréseket is az index.php ra irányítja?
Template rendszerrel dolgozok, ez saját fejlesztés.
Megvan a kész html oldalam, ez benne van a tempate mappában, ott helyezkedik el mellette a mappán belül az images mappa a css js stb....
Tehát ha a templates mappát belül megnyitom a kész html oldalt akkor rendesen látom a grafikai elemeket, de, hogy az oldal dinamikus tartalommal töltsem fel, az html ben jelzőket helyezek el, melyet majd a php megnyit kiolvas, és helyette tartalmat helyez oda.
Az index.php feladata megnyissa nekem a html -t egy stringet készít belőle, átolvassa, hogy mit talál benne.:
stylus.css, java.js, images/kep.jpg, {TARTALOM}
Mind különféle dolgokat, melyeket átír szépen tehát az elérést módosítja, hogy templates/stylus.css, templates/java.js, templates/images/kep.jpg......
De ezen kívül a CSS fájlra is külön van ami megnyitja és a tartalmát átírja, a /images mintát keresi meg, így módosítja azoknak is az útvonalát.
Ha ez mind megvolt, lezárja és kiírja a komplett oldalt.
De itt a bibi, hogy amikor az első URL értéket megkapja az oldal akkor még nincs gond, de amikor a második érték megérkezik neki, (az általad írt utolsó módszerrel is) minden amit a php átírt, fogja a .htaccess és az inden.php irányítja. De nem értem, hogy miért nem tetszik neki?
Tehát ahogy látom az URL ben szereplő tagokat fogja és elé írja, de ez a html kódban nem látszik, ez akkor látszik amikor meghívja a fájlokat.
Így a css -t is a php magamrol/teszt/templates mappában kezdi el keresni, ami nem létezik.
Tegyél egy /-jelet a css hivatkozás elé, pl:
<link rel="stylesheet" type="text/css" href="/css/style.css" media="screen" />
Így sem jó. :(
Ugyan úgy nem tölt be.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!