Autor Zpráva
Tomaso
Profil
Ahoj,
můžete mi prosím poradit s na první pohled jednoduchými rewrity? Měly by z podstránky domena.cz/cs/homepage.html udělat domena.cz/.

Používáme redakční systém, který domena.cz redirectne na stranku domena.cz/cs/homepage.html. Tzn. obsah na domena.cz neexistuje.

Zkoušeli jsme to nasimulovat rewritou, která by url přepsala:
    RewriteRule ^/+$ /cs/homepage.html 
To fungovalo, kdo přijde na domena.cz, tak mu tato url zůstane, ale obsah je zobrazen.

Vznikl ale SEO problém duplicitního obsahu na těch dvou uvedených url. Proto je potřeba /cs/homepage.html přesměrovávat na /. Po přidání tohoto přesměrování ale vznikla smyčka při přístupu na domena.cz, i když by podle mě teoreticky vzniknout neměla (1. pravidlo přesměrovává a 2. přepisuje):
Takhle to vypadá celkově po úpravě:
    RewriteRule ^/cs/homepage.html$ / [R=301,L]
    RewriteRule ^/+$ /cs/homepage.html 
Dokážete poradit co v rewrite opravit? Nebo to může ještě nějaká funkce apache ovlivňovat?

Pro úplnost: Pro předání redakčnímu systému je tam 3. a poslední rewrita - všechny požadavky, které přijdou jdou na do centrálního skriptu, který už servíruje obsah.
    RewriteRule    .*  /path/cms/cms.php [T=application/x-httpd-php,L]
Kajman
Profil
Při přesměrování na root kontrolujte, zda není již udělaný tajný přepis.
RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^/cs/homepage.html$ / [R=301,L,NE]
Tomaso
Profil
Kajman:
Díky za tip, ale ve spojení s tím naším CMSkem nezafungoval.
Nakonec je celkové řešení bez cyklení toto:
    
    RewriteCond %{QUERY_STRING} !rewritten=1
    RewriteRule ^/cs/homepage.html / [R=302,L,NE]

    RewriteRule ^/+$ /cs/homepage.html?rewritten=1 [P]
    RewriteRule    .*  /path/cms/cms.php [T=application/x-httpd-php,L]

Důvod proč {ENV:REDIRECT_STATUS} nešlo použití byl asi tenhle:
Přepsání se muselo udělat s použitím[P], aby cmsko zaregistrovalo změnu chtěné adresy. A v tom případě pořád docházelo k cyklení, asi se {ENV:REDIRECT_STATUS} nenaplnilo.
Tak jsem cyklení zabránil tím, že jsem si v prvním přepsání označil, že už to bylo přepsáno.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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