Mod_rewrite két nyelvű oldal
2021-04-11T19:56:26+02:00
2021-05-02T09:33:04+02:00
2022-08-12T02:25:29+02:00
tivisu
Sziasztok,
a mod_rewrite-ban (is) elég gyenge vagyok még, próbálok kétnyelvű oldalt készíteni. Az alap link valahogy így néz ki:

1.
http://oldal.rs/vojvodjanski.html
ehhez van:
RewriteRule ^([^/]*)\.html$ /index.php?c=$1 [L]

2.
http://oldal.rs/vojvodjanski/drustvo.html
ehhez van:
RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?c=$1&kategorija=$2 [L]

...

A problémám az, hogy mindegyikhez hozzá kéne csatolnom egy "hu"-t
pl:
http://oldal.rs/hu/vojvodjanski.html
http://oldal.rs/hu/vojvodjanski/drustvo.html
...

Mod rewrite-al még nem csináltam ilyet, ehhez kéne segítség, h hogyan lehet megoldani?
Előre is köszönöm,
T
Mutasd a teljes hozzászólást!
Nem hiszem, hogy ezzel a kérdéssel így bárki bármit is kezdeni tudna. A többnyelvű oldalaknál az URL kezelés (jelen esetben a mod_rewrite) a legkisebb gond. Tudni kellene, hogyan működik a backend.

Több módszer is létezik arra, hogy többnyelvű oldalt csinálj. Az egyik módszer az, hogy a kliens (böngésző) küldi az Accept-Language headert, és automatikusan a megfelelő nyelvű tartalmat küldi a backend a kliensnek. Vagy csinálhatod azt is akár, hogy van egy opcionális paraméter a query string-ben.

Előbbi megoldás esetén a mod_rewrite önmagában nem lesz elég, mivel kell egy microgateway a backend elé, ami manipulálja a request-et, hogy az URL-ben lévő ISO-693 language taget mappelje Accept-Language headerbe.

Utóbbi megoldás esetén pedig tényleg elég a mod_rewrite, csak a RewriteRule-ban ki kell egészíteni a regex patternt arra, hogy capture-ölje a language taget és mappelje a megfelelő query string paraméterbe.

Mindenképp legyen egy default language konfigurálva a backenden, két okból kifolyólag:
1) Lehet, hogy olyan nyelvet kérnek tőled, amit nem támogatsz.
2) Lehet, hogy nem ISO-693 language taget küldenek, hanem valami hülyeséget.
3) Lehet, hogy egyáltalán nem küldenek semmit se. (Erre is érdemes odafigyelni a mod_rewrite hegesztése során)

Ha csak a regex érdekel, ez kötelezően elvárja a language taget az URL-ben (de nem validálja azt):
^([\w-]+)\/(\w+)\.html$
hu/vojvodjanski.html
en-US/vojvodjanski.html

^([\w-]+)\/(\w+)\/(\w+)\.html$
hu/vojvodjanski/drustvo.html
hu-HU/vojvodjanski/drustvo.html

Biztos lehet szebb regexet is írni ennél, mint amit én össze tudtam itt rakni. Ajánlom a regex101.com oldalt ^^
Mutasd a teljes hozzászólást!

  • RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?lang=$1&c=$2&kategorija=$3 [L]
    Mutasd a teljes hozzászólást!
  • Nem hiszem, hogy ezzel a kérdéssel így bárki bármit is kezdeni tudna. A többnyelvű oldalaknál az URL kezelés (jelen esetben a mod_rewrite) a legkisebb gond. Tudni kellene, hogyan működik a backend.

    Több módszer is létezik arra, hogy többnyelvű oldalt csinálj. Az egyik módszer az, hogy a kliens (böngésző) küldi az Accept-Language headert, és automatikusan a megfelelő nyelvű tartalmat küldi a backend a kliensnek. Vagy csinálhatod azt is akár, hogy van egy opcionális paraméter a query string-ben.

    Előbbi megoldás esetén a mod_rewrite önmagában nem lesz elég, mivel kell egy microgateway a backend elé, ami manipulálja a request-et, hogy az URL-ben lévő ISO-693 language taget mappelje Accept-Language headerbe.

    Utóbbi megoldás esetén pedig tényleg elég a mod_rewrite, csak a RewriteRule-ban ki kell egészíteni a regex patternt arra, hogy capture-ölje a language taget és mappelje a megfelelő query string paraméterbe.

    Mindenképp legyen egy default language konfigurálva a backenden, két okból kifolyólag:
    1) Lehet, hogy olyan nyelvet kérnek tőled, amit nem támogatsz.
    2) Lehet, hogy nem ISO-693 language taget küldenek, hanem valami hülyeséget.
    3) Lehet, hogy egyáltalán nem küldenek semmit se. (Erre is érdemes odafigyelni a mod_rewrite hegesztése során)

    Ha csak a regex érdekel, ez kötelezően elvárja a language taget az URL-ben (de nem validálja azt):
    ^([\w-]+)\/(\w+)\.html$
    hu/vojvodjanski.html
    en-US/vojvodjanski.html

    ^([\w-]+)\/(\w+)\/(\w+)\.html$
    hu/vojvodjanski/drustvo.html
    hu-HU/vojvodjanski/drustvo.html

    Biztos lehet szebb regexet is írni ennél, mint amit én össze tudtam itt rakni. Ajánlom a regex101.com oldalt ^^
    Mutasd a teljes hozzászólást!
  • Azt nem értem, hogyha az oldalt így használom:

    http://oldal.rs/vojvodjanski/drustvo.html
    ahhoz:
    RewriteRule ^([^/]*)/([^/]*)\.html$ /index.php?c=$1&kategorija=$2 [L]

    ha viszont így:
    http://oldal.rs/hu/vojvodjanski/drustvo.html
    ahhoz:

    RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ /index.php?lang=$1&c=$2&kategorija=$3 [L]
    Ez után, amikor "visszamegyek" a

    http://oldal.rs/vojvodjanski/drustvo.html

    oldalra, akkor a vojvodjanski lesz a "lang"...
    Ezt nem értem... :(
    Mutasd a teljes hozzászólást!
  • Óh, a [\w-] nem lesz jó language tag-hez, inkább:
    [a-z]{2,3}(\-[A-Z]{2,3})?
    Mutasd a teljes hozzászólást!
  • Lesz minek utánanéznem, illetve próbálkoztam már, de még nem megy, túl sok az infó egyszerre, ahhoz képest, hogy majdnemhog ysemmilyen tapasztalatom nincs ezen a téren.
    Annak örülnék, ha egy konkrét példát kapnék a kérdésemre, vagyis, mit tegyek, ha egy per "hu"-t hozzá akarok adni a linkhez.
    Vagyis, ha van pl. a http://oldal.rs/tvbecej.html és és hozzá akarok adni egy "hu"-t,
    akkor úgy nézne ki, h http://oldal.rs/hu/tvbecej.html
    A http://oldal.rs/tvbecej.html rewriterule: RewriteRule ^([^/]*)\.html$ /index.php?c=$1 [L]
    Az ok hogy hozzáadom a lg=hu-t, viszon, amikor visszalépek, akkor már a "tvbecej" lesz a "hu"... ezt nem értem.
    Most vicces lesz, de pl a php-ben az lenne, hogy
    if (isset($lg)) {
    $lang = $lg;
    } else {
    $lang = '';
    }
    vagyis, ha "van", akkor "ez" történik, ha "nincs", akkor "nem történik semmi"... kérdésem, hogy a mod rewriteban is meg lehet-e ezt valahogy így érteni?
    Előre is kösz,
    T
    Mutasd a teljes hozzászólást!
  • Köszönöm a válaszod, innen indulva megtaláltam a megoldást.
    RewriteRule ^(hu)/([^/]*)\.html$ /index.php?lg=$1&c=$2 [L]
    vagy

    RewriteRule ^(hu|sr)/([^/]*)\.html$ /index.php?lg=$1&c=$2 [L]

    T
    Mutasd a teljes hozzászólást!
abcd