Autor Zpráva
Marja
Profil *
Ahoj,

prosím o pomoc s problémem při tvorbě dynamických subdomén v htaccess. Mám tento kód:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.cz
RewriteRule (.*) http://www.example.cz/$1 [R=301]

RewriteCond %{http_host} !^(www\.)?example\.cz [NC] 
RewriteCond %{http_host} ^(www\.)?([^.]+)\.example\.cz
RewriteRule detail-(.*)\.html$ index.php?subdomena=%2&stranka=detail&id=$1 [QSA]

RewriteCond %{http_host} !^(www\.)?example\.cz [NC]
RewriteCond %{http_host} ^(www\.)?([^.]+)\.example\.cz
RewriteRule (.)?$ http://www.example.cz/index.php?id=%2&stranka=kategorie [QSA,P]



Na serveru mám soubory ve složce WWW, nad ní v rootu mám zmíněný .htaccess. Toto řešení sice funguje, ale přijde mi, že je to hodně pomalé - na stránku čekám třeba 3s - a plné chyb. Poslední řádek bych ráda nějak zprovoznila bez toho http... Bez něj to teď píše 404. Navíc mám pak problém se soubory zpracovávající události javascriptu; v kódu stránky je na ně odkázáno např. "soubor.php", což však hodí taky 404 (nevím jak tam uvést správnou cestu, lomítka nefungují).

Ještě shrnu o co mi jde. Chci mít vytvořené dynamické subdomény podle kategorií.
Davex
Profil
Připadá mi to celé špatně navržené. V každém URL je duplicitně detail a u kategorie se cesta z URL zahazuje. Nevidím ani žádný přínos v tom, mít pro kategorie subdomény. Nemohla by být struktura URL nějak normálně, třeba www.example.cz/kategorie/produkt? Toto by si také mohla jednoduše routovat sama aplikace.

Problémy mohou být způsobeny tím, že nikde nepoužíváš příznak [L] a poslední pravidlo přepisuje všechny soubory, protože tam není žádné omezení. Třeba aby se přepisovaly jen neexistující soubory:

RewriteCond %{REQUEST_FILENAME} !-f
Marja
Profil *
Ty subdomény jsou pro mě bohužel důležité.

V tom mém řešení pak ani nelze použit např.

RewriteRule hledani index.php?stranka=hledani [QSA]


Vrátí 404, funguje pouze při zadání absolutní cesty

Davex
Profil
Aby přepis fungoval, tak musí být společný prostor pro všechny subdomény a je nutné přidat před index.php lomítko (nebo nastavit RewriteBase /). Doporučuji používat příznak [L], aby se přepis včas přerušil a již jednou přepsané URL se znovu nepřepisovalo a také záleží na pořadí pravidel - více konkrétní by měly být před obecnými.

RewriteEngine on

RewriteCond %{HTTP_HOST} ^example\.cz
RewriteRule (.*) http://www.example.cz/$1 [R=301,L]

RewriteRule hledani /index.php?stranka=hledani [QSA,L]

RewriteCond %{http_host} !^(www\.)?example\.cz [NC] 
RewriteCond %{http_host} ^(www\.)?([^.]+)\.example\.cz
RewriteRule detail-(.*)\.html$ /index.php?subdomena=%2&stranka=detail&id=$1 [QSA,L]

RewriteCond %{http_host} !^(www\.)?example\.cz [NC]
RewriteCond %{http_host} ^(www\.)?([^.]+)\.example\.cz
RewriteRule (.)?$ /index.php?id=%2&stranka=kategorie [QSA,L]
Marja - Kysuca
Profil *
Díky za radu, problém vyřešen :). Omlouvám se za duplicitu.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0