logo
12.09.2019 10:14
1
Ahoj,
mám url http://domena.cz/sluzby.php?language=cz nebo http://domena.cz/kariera.php?language=cz a potřeboval bych z toho udělat http://domena.cz/sluzby/ nebo http://domena.cz/kariera/ .

Byl by někdo tak hodný a poradil mi jak má vypadat zápis v .htaccess souboru?

Už jsem prohledal všechno možný na netu, ale nemůžu to složit dohromady :-(

Moc diky, O.
12.09.2019 10:24
2
Kód:
RewriteEngine On
RewriteBase /    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^([^/]+)/?$ $1.php?language=cz [QSA,NC,L]
pak je jen otázka, jestli chceš v url zachovat jazyk nebo nikdo, pak by mohlo být něco jako http://domena.cz/en/kariera/, to ale vypadá hodně divně, takze spise doporučím řešit překlady jinak.
12.09.2019 11:01
3
Původně odeslal TomášX
Kód:
RewriteEngine On
RewriteBase /    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^([^/]+)/?$ $1.php?language=cz [QSA,NC,L]
pak je jen otázka, jestli chceš v url zachovat jazyk nebo nikdo, pak by mohlo být něco jako http://domena.cz/en/kariera/, to ale vypadá hodně divně, takze spise doporučím řešit překlady jinak.
Diky za reseni, ale vlozil jsem to do souboru .htaccess, ale pri nahrani na FTP se s URL nic nedeje. Nemuze byt chyba v tom zapisu?
Ja mam pro kazdou mutaci vlastni stranku, tj. CZ - kariera.php, EN - career.php.

Diky za pomoc
12.09.2019 11:20
4
otázka co se má dít :). Ten můj kód ti zajistí, že adresa http://domena.cz/sluzby/ ti funguje a zobrazí správnou stránku. Pokud chceš zároveň dělat i přesměrování těch .php na nové, musíš k tomu dodat nový předpis.

Píšu z hlavy, ale teď by se mělo:
- stránky sluzby.php?language=cz přesměrovávat (301) na /sluzby (obdobně s kariera)
- stránky career.php?language=en přesměrovávat (301) na /career (obdobně s service, about atd.)
- stránky jako /sluzby /kariera interně otevřou php script sluzby.php?language=cz či kariera.php?language=cz, tj. předá se tam správný jazyk
- stránky jako /career interně otevřou script career.php?language=en
- je nutné dvakrát vyplnit všechny české a anglické stránky, aby se nemohly pomýchat jazyky a jiné nastavení


Kód:
RewriteEngine On
RewriteBase / 

# cz stranky
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.php -f
RewriteCond %{QUERY_STRING} (^|&)language=cz [NC]
RewriteRule (sluzby|kariera)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(sluzby|kariera)/?$ $1.php?language=cz [QSA,NC,L]


# en strany
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.php -f
RewriteCond %{QUERY_STRING} (^|&)language=en [NC]
RewriteRule (service|career|about)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(service|career|about)/?$ $1.php?language=en [QSA,NC,L]
12.09.2019 11:42
5
BTW: připojím se s dotazem, dá se nějak pořešit přes .htaccess to, že se mi v error logu objevují 404 na url které nejsou správně zakončené?

např, správně je domena.tld/zbozi-id-1256.html

a v error logu je domena.tld/zbozi-id-1256.ht ... atd

asi to jsou nějaké odkazy někde špatně zalomené z emailů diskusí atd ... dá se to nějak řešit, aby to správně přesměrovalo? Když tam je alespoň to id?
12.09.2019 12:00
6
Původně odeslal TomášX
otázka co se má dít :). Ten můj kód ti zajistí, že adresa http://domena.cz/sluzby/ ti funguje a zobrazí správnou stránku. Pokud chceš zároveň dělat i přesměrování těch .php na nové, musíš k tomu dodat nový předpis.

Píšu z hlavy, ale teď by se mělo:
- stránky sluzby.php?language=cz přesměrovávat (301) na /sluzby (obdobně s kariera)
- stránky career.php?language=en přesměrovávat (301) na /career (obdobně s service, about atd.)
- stránky jako /sluzby /kariera interně otevřou php script sluzby.php?language=cz či kariera.php?language=cz, tj. předá se tam správný jazyk
- stránky jako /career interně otevřou script career.php?language=en
- je nutné dvakrát vyplnit všechny české a anglické stránky, aby se nemohly pomýchat jazyky a jiné nastavení


Kód:
RewriteEngine On
RewriteBase / 

# cz stranky
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.php -f
RewriteCond %{QUERY_STRING} (^|&)language=cz [NC]
RewriteRule (sluzby|kariera)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(sluzby|kariera)/?$ $1.php?language=cz [QSA,NC,L]


# en strany
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.php -f
RewriteCond %{QUERY_STRING} (^|&)language=en [NC]
RewriteRule (service|career|about)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(service|career|about)/?$ $1.php?language=en [QSA,NC,L]
Moji myslenku jsi pochopil velice dobre. Vyspecifikovat stranky pro CZ a EN neni problem, je jich tam celkem 5 pro kazdou mutaci. Ale nejede to ani na localhostu, ani na hostingu (chyba 500).

Nazvy stranek (index, produkty, sluzby, ...) a EN (main, products, services, ....) jsem 2x kontroloval.

Vysledny skript je, ale je tam jeste nejaka chybka. Mrknul bys na to jeste jednou, prosim?

Kód:
RewriteEngine On
RewriteBase / 

# cz stranky
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.php -f
RewriteCond %{QUERY_STRING} (^|&)language=cz [NC]
RewriteRule (index|produkty|sluzby|kariera|kontakt)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(index|produkty|sluzby|kariera|kontakt)/?$ $1.php?language=cz [QSA,NC,L]


# en strany
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} \.php -f
RewriteCond %{QUERY_STRING} (^|&)language=en [NC]
RewriteRule (main|products|service|career|contact)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(main|products|service|career|contact)/?$ $1.php?language=en [QSA,NC,L]
12.09.2019 12:06
7
Původně odeslal puhy.cz
BTW: připojím se s dotazem, dá se nějak pořešit přes .htaccess to, že se mi v error logu objevují 404 na url které nejsou správně zakončené?

např, správně je domena.tld/zbozi-id-1256.html

a v error logu je domena.tld/zbozi-id-1256.ht ... atd

asi to jsou nějaké odkazy někde špatně zalomené z emailů diskusí atd ... dá se to nějak řešit, aby to správně přesměrovalo? Když tam je alespoň to id?
dá, samozřejmě. S těmito url se sektávám často v případech, kdy vyhledávač se pokouší najít url v textu, tak si vezme postupně všechny varianty a zkouší, která z nich je správná. V takovém případě to ošetření nemá žádný vliv, protože stejně vyhledávač dojde k .html variantě a ta je ok.

Mohlo by to vypadat nějak takhle:

Kód:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(zbozi-id-)([0-9]+)\.(h|ht|htm|htm)?$ $1$2.html [R=301,L]
Pak to vezme všechny tyhle url a přesměruje na html verzi s 301:
- http://domena.tld/zbozi-id-1256.
- http://domena.tld/zbozi-id-1256.h
- http://domena.tld/zbozi-id-1256.ht
- http://domena.tld/zbozi-id-1256.htm
12.09.2019 12:10
8
Jak na to koukám, nejspíš tam mám chybu v řádku "RewriteCond %{REQUEST_FILENAME} \.php -f", správně by to mohlo vypadat takhle:

Kód:
RewriteEngine On
RewriteBase / 

# cz stranky
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteCond %{QUERY_STRING} (^|&)language=cz [NC]
RewriteRule (index|produkty|sluzby|kariera|kontakt)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(index|produkty|sluzby|kariera|kontakt)/?$ $1.php?language=cz [QSA,NC,L]


# en strany
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteCond %{QUERY_STRING} (^|&)language=en [NC]
RewriteRule (main|products|service|career|contact)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(main|products|service|career|contact)/?$ $1.php?language=en [QSA,NC,L]
Pokud ani to nezabare, tak bych na tom řádku nechal pouze

Kód:
RewriteCond %{REQUEST_FILENAME} -f
12.09.2019 13:26
9
Původně odeslal TomášX
dá, samozřejmě. S těmito url se sektávám často v případech, kdy vyhledávač se pokouší najít url v textu, tak si vezme postupně všechny varianty a zkouší, která z nich je správná. V takovém případě to ošetření nemá žádný vliv, protože stejně vyhledávač dojde k .html variantě a ta je ok.

Mohlo by to vypadat nějak takhle:

Kód:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(zbozi-id-)([0-9]+)\.(h|ht|htm|htm)?$ $1$2.html [R=301,L]
Pak to vezme všechny tyhle url a přesměruje na html verzi s 301:
- http://domena.tld/zbozi-id-1256.
- http://domena.tld/zbozi-id-1256.h
- http://domena.tld/zbozi-id-1256.ht
- http://domena.tld/zbozi-id-1256.htm
Ok, díky. Teď mě ale napadá, má cenu to řešit? Nepovede to spíš k duplicitám? Ano, procházel jsem ve who is IP a dělá to google ...
12.09.2019 13:35
10
Původně odeslal puhy.cz
Ok, díky. Teď mě ale napadá, má cenu to řešit? Nepovede to spíš k duplicitám? Ano, procházel jsem ve who is IP a dělá to google ...
s přesměrováním 301 to k duplicitám nepovede, ale pokud to má být pouze pro vyřešení návštěv Google vyhledávače, nepřidával bych to, je to zbytečné.
13.09.2019 08:23
11
Původně odeslal TomášX
Jak na to koukám, nejspíš tam mám chybu v řádku "RewriteCond %{REQUEST_FILENAME} \.php -f", správně by to mohlo vypadat takhle:

Kód:
RewriteEngine On
RewriteBase / 

# cz stranky
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteCond %{QUERY_STRING} (^|&)language=cz [NC]
RewriteRule (index|produkty|sluzby|kariera|kontakt)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(index|produkty|sluzby|kariera|kontakt)/?$ $1.php?language=cz [QSA,NC,L]


# en strany
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}/.php -f
RewriteCond %{QUERY_STRING} (^|&)language=en [NC]
RewriteRule (main|products|service|career|contact)\.php$ /$1? [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(main|products|service|career|contact)/?$ $1.php?language=en [QSA,NC,L]
Pokud ani to nezabare, tak bych na tom řádku nechal pouze

Kód:
RewriteCond %{REQUEST_FILENAME} -f
Asi jsem hloupy, ale ted kdyz kliknu napr. kariera, tak mi naskoci domena.cz/kariera , ale zobrazi "Tato stránka nefunguje, web domena.cz vas přesměroval příliš mnohokrát".
Pokud by to mel byt problem, tak bych odstranil jen ?language="cz|en".
Diky