Autor Zpráva
Snek
Profil *
Dobrý den,
řeším tu jeden problém, s kterým si nevím rady. Potřebuji staré adresy přesměrovat s 301 na nové - příklad .htaccess mám:

Redirect 301 /cz/menu.php?id=8 /cz/menu-nasi-kuchyne/
Redirect 301 /cz/menu.php?id=5 /cz/menu-italske-kuchyne/
Redirect 301 /cz/menu.php?id=2 /cz/menu-slovenske-kuchyne/

jenže to nefunguje, protože to neumí asi pracovat s proměnnými 2/5/8? funguje mi jen verze

Redirect 301 /cz/menu.php /presmerovat-kamkoliv/

jenže tam pak mám i /en/ (nejen /cz/ a id se kombinují) ... hlavní otázka zní, zda s Redirect 301 lze použít proměnné jak, a napevno odkazovat na stránky , které tam napíši? Mě se to totiž nedaří. Viz příklad mi prostě dle id 2/5/8 nerozezná a vždy skoči jen pokud mam nastavený přímo soubor bez proměnné (viz 4tá ukázka).

děkuji za případnou pomoc.
yFang
Profil
Snek:
Řešil bych to přes mod_rewrite, viz Mod_rewrite » Podstrkávání a přesměrování

Případně se můžeš podívat na další možnosti tady:
http://www.programmingfacts.com/301-redirect-dynamic-urls-static/
Tori
Profil
Přesměrujte všechny adresy obsahující menu.php na nějaký PHP skript, který pod $_GET['id'] načte z DB správnou novou adresu a přesměruje na ni (i s kódem 301). Pokud ID nenajde, přesměruje na nějakou výchozí stránku. Nastavovat v .htaccess napevno víc než tři podobné přesměrování je imho zbytečná práce, když to lze zautomatizovat.
Snek
Profil *
Tori:
"Přesměrujte všechny adresy, obsahující menu.php"

nevíte jak bych měl tohle zapsat? když mám /cz/menu.php nebo /en/menu.php , aby mi to jen tyto přesměrovalo na nějáký vybraný php script ?
Alphard
Profil
Tori:
Pokud ID nenajde, přesměruje na nějakou výchozí stránku.
Maximálně krátkodobě. Když robot přijde na neexistují stránku, je potřeba hodit 404. Není dobré ho z každé vymyšlené adresy přesměrovat na stejnou stránku, kde dostane 200 ok.

[#4] Snek
Používáte nějaký chytřejší router, nebo jen účelové podmínky přímo z GETu?
Snek
Profil *
jen z GET s tím, že na serveru byl i fyzicky adresář cz a en (ty už tam nejsou fyzicky a jsou nahrazeny pravidlem na nové stránky (taky jedou přes /cz/ a /en/ viz příklady ale vše přes pravidla).
Problém se objevil právě až u přesměrování starých adres s proměnými, které né a né přesměrovat jak jsem psal úvodem).

pokud to udělám přes Redirect 301 jsou přesměrovávat jen statické adresy (stará - nová) a né ty původně dynamické (stará s proměnou - nová).

Progooglil jsem i internet a nic :(
Tori
Profil
Zkuste tohle. Všechny požadavky na .php skript anebo neexistující soubor/složku posune ke zpracování skriptu presmeruj.php.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} .*\.php [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) presmeruj.php?url=$1 [L,QSA]
Např. na požadavek neco/menu.php?id=123 (relativně k tomuto .htaccess) dostane skript presmeruj.php takovéhle hodnoty v GET:
array (
    'url' => 'neco/menu.php',
    'id'  => 123
)



Alphard:
Díky za opravu, neuvědomila jsem si to.
Snek
Profil *
díky Tori,
hned zítra to vyzkouším a snad se mi to povede!
Snek
Profil *
Bohužel mi to opravdu nejde.

Mohlo by mi , kdybych věděl jak zadat RewriteCond pro podmínku .. pokud adresář /cz/ neexistuje a současně pokud soubor menu.php neexistuje ale je volán přes url ( /cz/map.php?id=neco ) tak přesměruj na presmeruj.php?url=$1

připadám si v tom úplně ztracen, vše mi padá na chybu 404 a nemůžu s tím hnout.


právě se mi to rozěbehlo po malé úpravě
RewriteRule (.*) %{DOCUMENT_ROOT}/presmerovani.php?url=$1 [L,QSA]

díky lidi! snad už budu mít klid (ještě mě čeká další 4 podobné podmínky a snad to z tého první už odvodím sám)
Tori
Profil
Snek:
právě se mi to rozěbehlo po malé úpravě
Ten přesměrovávací skript je v jiné složce než .htaccess? (Jen mne zajímá příčina, proč to nešlo)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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