Autor | Zpráva | ||
---|---|---|---|
Vitality77 Profil * |
#1 · Zasláno: 20. 11. 2014, 06:49:02
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 |
#2 · Zasláno: 20. 11. 2014, 09:50:30
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 * |
#3 · Zasláno: 21. 11. 2014, 11:58:12 · Upravil/a: Moderátor (editace znemožněna) 21. 11. 2014, 13:57:21
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 |
#4 · Zasláno: 21. 11. 2014, 12:49:40
Vitality77:
„Toto řešení výše mi přijde poněkud neuplné.“ Z jakého důvodu? |
||
Vitality77 Profil * |
#5 · Zasláno: 21. 11. 2014, 13:53:29
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 * |
#6 · Zasláno: 22. 11. 2014, 10:32:28
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(); 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 |
#7 · Zasláno: 22. 11. 2014, 11:51:22
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 * |
#8 · Zasláno: 22. 11. 2014, 12:36:53
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") 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 |
#9 · Zasláno: 22. 11. 2014, 13:23:07
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.)
|
||
Časová prodleva: 9 let
|
0