Autor Zpráva
Vitality77
Profil *
Zdravím

prosím o pomoc s vyřešením vzniklého problému se kterým si nevím rady.

Mám stránku která má 2 proměnné lang=(en|ru|cz) a page=stranka.

Url stránky vypadá nějak takto: www.test.com/?lang=en&page=test
Tuto stránku chci přesměrovat pomoci htaccess na tento odkaz: www.test.com/en/test

Což se mi daří díky tomuto kódu v htaccess:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /(.*)/(.*)
RewriteRule ^(.*)/(.*)$ index.php?lang=$1&page=$2 [L]

Problém je, že jako výchozí jazyk mám češtinu(=cz) a tu nechci mít v url jako proměnnou, to znamená, že pokud mám odkaz takto:
www.test.com/test jedna se o tento skutečný odkaz: www.test.com/?lang=cz&page=test

Jenže neumím napsat v htaccess podmínku tak aby to fungovalo..:/

Taky jsem si všiml že pokud zadám www.test.com/en/en/test tak to přesměrovává, což je asi špatně. Mělo by to přesměrovat na odkaz s jedním en nebo hodit 404 page.

Prosím o pomoc s vytvořením takového htaccess kódu,
Díky moc předem!
Kajman
Profil
Zkuste to rozepsat na dvě pravidla.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en|ru)/([^/]*)$ index.php?lang=$1&page=$2 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?lang=cz&page=$1 [L]
Vitality77
Profil *
Super! Děkuji funguje to, já věděl že to bude něco velmi jednoduchého, ale jak člověk se v těch klikach a hákech neorientuje tak to může být i na celý den.. :-/

Ještě prosím o jednu odpověď, věřím že to taky není nic složitého.
Na stránce všechno volám z indexu kde odkaz je ?page=test a pak tuto stránku page vkládám includem takto:

    if (file_exists($content_page)) {
        include($content_page);
    } else {
        header('This is not the page you are looking for', true, 404);
           include('pages/404.php');
           exit();
    }

Chtěl jsem se zeptat, jak se má správně zavolat 404 error page s hlavičkou 404. Toto řešení výše mi přijde poněkud neuplné.

Děkju moc!
Kajman
Profil
Vitality77:
Toto řešení výše mi přijde poněkud neuplné.

Z jakého důvodu?
Vitality77
Profil *
Protože to podsune stránku 404, ale do hlavičky to nevypíše chybu HTTP 404. Nebo se pletu? V PHP nejsem silný, co přesně znamená "header()"
Vitality77
Profil *
Ještě jednou bych rád otevřel tuto otázku.. Prosím o radu jak to správně napsát.
Jíž uvedu i odkaz na stránky, jedná se o web který se zabývá kódováním html šablon: www.html-factory.cz

Uvedu v čem je potíž.
Jak už jsem psál veškerý obsáh se volá z indexu kód je vyše. Teď mám vložený kód v htaccess, který uvedl Kajman.

Když zadám tento kód při neexistujícím odkazu:
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
        include "page_components/head.php";
        include('pages/404.php');
        exit();
Tak mi to píše, že nemohu vkládat hlavičku webu 2x jelikož už existuje. Po smazaní header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); to už nepíše. Ale po smazaní to přece nevypisuje prohlížeči chybu 404 nebo se pletu?? On pouze podsune stránku a chápe to, jako kdyby ten odkaz existoval..

Poraďte jestli mám pravdu nebo ne. Děkuju!
Davex
Profil
Vitality77:
Tak mi to píše, že nemohu vkládat hlavičku webu 2x jelikož už existuje.
Pokud již došlo k odeslání HTTP hlavičky a části obsahu ke klientovi, tak nelze hlavičku nahrazovat jinou. Jak přesně zní ta chyba? Většinou tam bývá uvedeno i číslo řádku, kde se začal odesílat obsah.

Příčina by mohla být stejná jako v Nejčastější potíže s PHP (FAQ) » headers already sent….
Vitality77
Profil *
Přesné znění hlášky: Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/74506/virtual/www/domains/html-factory.cz/index.php:2) in /data/web/virtuals/74506/virtual/www/domains/html-factory.cz/index.php on line 66

což je přesně tento řádek:
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found")
a za nim hlavička atd
include "page_components/head.php";
include('pages/404.php');
exit();

Otázka zní. je potřeba tam mít ten php header? Nebo jak se této chyby mám zbavit? Co přesně nesmím vkládat?
ono to posílá <document><head></head><body> nebo co přesněji?
Potřebuji vložit styly atd do hlavičky..
Davex
Profil
Vitality77:
output started at .../index.php:2
Znamená, že na řádku č. 2 už došlo k odeslání HTTP hlavičky, takže se nedá poslat jiná na řádku č. 66. Nejdřív posílej HTTP hlavičky a teprve potom HTML kód stránky. (HTTP hlavička zaslaná funkcí header() je něco jiného než HTML element <head>.)

(Dalo by se to obejít zapnutím výstupního bufferu funkcí ob_start() nebo v konfiguraci PHP zapnout output_buffering, ale to je spíš nouzové řešení při špatném návrhu aplikace.)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: