Autor | Zpráva | ||
---|---|---|---|
Snek Profil * |
#1 · Zasláno: 29. 10. 2012, 22:30:47
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 |
#2 · Zasláno: 29. 10. 2012, 23:05:03
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).
|
||
Snek Profil * |
#4 · Zasláno: 29. 10. 2012, 23:17:19
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 |
#5 · Zasláno: 29. 10. 2012, 23:18:58
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 * |
#6 · Zasláno: 29. 10. 2012, 23:27:16
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 |
#7 · Zasláno: 30. 10. 2012, 00:10:25 · Upravil/a: Tori
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] 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 * |
#8 · Zasláno: 30. 10. 2012, 01:13:34
díky Tori,
hned zítra to vyzkouším a snad se mi to povede! |
||
Snek Profil * |
#9 · Zasláno: 30. 10. 2012, 14:40:21 · Upravil/a: Snek
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 |
#10 · Zasláno: 1. 11. 2012, 12:01:05
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) |
||
Časová prodleva: 11 let
|
0