Autor | Zpráva | ||
---|---|---|---|
casy Profil |
Ahoj,
mám problém s přesměrováním starých URL adres na nové. Vyzkoušel jsem desítky postupů z fór, ale bez úspěchu. Mám seznam všech starých i nových url a potřebuji najít správný příkaz pro htaccess aby se přesměrování provedlo. Nepotřebuji přepisovat URL pouze přesměrovat staré url (index.php?p=item_detail&id=1, které hází 404 na nové funkční adresy typu /detail/id/nazev/, které již fungují.) # OLD LINK # http://www.stranka.cz/index.php?p=detail-polozky&id=644 # NEW LINK # http://www.stranka.cz/detail/644/url_name Vyzkoušel jsem následující RewriteEngine On Redirect 301 /index.php?p=detail-polozky&id=644 http://www.stranka.cz/detail/394/url_name další pokus RewriteEngine On RewriteRule /index.php?p=detail-polozky&id=644 http://www.stranka.cz/detail/394/url_name [R=301,L] Raději uvádím celý htaccess.. RewriteEngine On # cele domeny (aliasy) RewriteCond %{REQUEST_URI} !^domains/ RewriteCond %{REQUEST_URI} !^/domains/ RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d RewriteRule (.*) domains/%2/$1 [DPI] # subdomeny (s nebo bez www na zacatku) RewriteCond %{REQUEST_URI} !^subdom/ RewriteCond %{REQUEST_URI} !^/subdom/ RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$ RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d RewriteRule (.*) subdom/%2/$1 [DPI] # aliasy - spravne presmerovani pri chybejicim / RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R] # subdomeny - spravne presmerovani pri chybejicim / RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R] RewriteEngine On RewriteRule ^export_googlebase.xml$ /export_googlebase.php [L] RewriteRule ^export_heureka.xml$ /export_heureka.php [L] # Hezke URL RewriteEngine On RewriteRule ^index.php$ http://www.stranka.cz/$1 [R=301] RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/?$ ?p=$1 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/([^/]+)?/?$ ?p=$1&id=$2 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/([^/]+)/([^/]+)?/?/?$ ?p=$1&id=$2&name2=$3 Moc děkuji za pomoc, Dan |
||
Kajman Profil |
#2 · Zasláno: 23. 7. 2015, 13:52:57
Problém je zjistit url_name, které v původní adrese není a nejspíše se bude šahat do databáze podle id.
Osobně bych staré adresy hodil novému php skriptu, který vysosne url_name a přesměruje přes funkci header. Na začátku by tedy mohlo přibýt nové pravidlo... RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{QUERY_STRING} ^p=detail-polozky&id=[0-9]+$ RewriteRule ^index\.php$ redirect-old-url.php [L] |
||
casy Profil |
Kajman:
Děkuji moc za pomoc. Už jsem to podle toho upravil. Měl jsem bohužel víc url adres pro volání položky, ale to jsem vyřešil rozkopírováním. Naštestí jich je jen 10. V redirect-old-url.php jsem vytvořil přesměrování pomocí funkce header <?php $id = intval($_GET["id"]); require 'db.php'; $con_NEW_items = mysql_query("SELECT * FROM items WHERE id = '$id' ") or die (mysql_error()); while ($echo_NEW_item = mysql_fetch_array($con_NEW_items) ): $url_name = $echo_NEW_item["url_name"]; endwhile; header("Location: http://www.stranka.cz/detail/$id/$url_name",TRUE,301); ?> a htaccess tedy takto RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{QUERY_STRING} ^p=detail-item-prvni&id=[0-9]+$ RewriteRule ^index\.php$ redirect-old-url.php [L] RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{QUERY_STRING} ^p=detail-item-druhy&id=[0-9]+$ RewriteRule ^index\.php$ redirect-old-url.php [L] RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{QUERY_STRING} ^p=detail-item-treti&id=[0-9]+$ RewriteRule ^index\.php$ redirect-old-url.php [L] Vážně děkuji, Dan |
||
Kajman Profil |
#4 · Zasláno: 23. 7. 2015, 14:36:20
Více hodnot parametru p můžete zpracovat jedním pravidlem, např. s takovoto podmínkou
RewriteCond %{QUERY_STRING} ^p=detail-item-(prvni|druhy|treti)&id=[0-9]+$ |
||
casy Profil |
Kajman:
URL pro výpis položek jsem skládal z kategori např. hračky = hracky-item&id=1 Můžu tedy použít tento zápis? RewriteCond %{QUERY_STRING} ^p=(hracky|dekorace|vyprodej)-item&id=[0-9]+$ EDIT: Použil jsem tento zápis a funguje to skvěle! :) Díky |
||
casy Profil |
#6 · Zasláno: 23. 7. 2015, 15:57:00
Když bych chtěl podobným způsobem přesměrovat URL adresy bez identifikátoru např. /?p=vyprodej na redirect-old-url2.php jak by měl zápis htaccess vypadat?
zkusil jsem tento zápis, ale nefunguje RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{QUERY_STRING} ^p=(vyprodej|dekorace|hracky)$ RewriteRule ^index\.php$ redirect-old-url2.php [L] Díky |
||
MSTRmt Profil |
Aby fungovalo RewriteRule se někdy musí dát před to
Options +FollowSymLinks .
|
||
Časová prodleva: 1 měsíc
|
|||
casy Profil |
Kajman:
Ještě jsem našel jeden problém při přesměrování. Na jiném webu jsem použil odlišnou URL adresu. Problém nastává když je za ID další parametr (název položky) a pokud v URL adrese je tak se přesměrování neprovede. # OLD LINK # http://www.stranka.cz/index.php?p=detail&id=644 // redirect se provede # OLD LINK S CHYBOU # http://www.stranka.cz/index.php?p=detail&id=644&item_name // tady je chyba a nepřesměruje se Používám Vaše řešení RewriteCond %{ENV:REDIRECT_STATUS} ="" RewriteCond %{QUERY_STRING} ^p=detail&id=[0-9]+$ RewriteRule ^index\.php$ redirect-old-url.php [L] Díky za pomoc! Dan |
||
juriad Profil |
#9 · Zasláno: 27. 8. 2015, 09:52:46
casy:
Druhý RewriteCond říká, že id musí být poslední parametr (výraz končí dolarem, který má význam konce). Když jej odstraníš (ten dolar), mělo by to brát každou adresu, která začíná parametry p=detail&id=[0-9]+ a za nimi může následovat cokoli.
|
||
casy Profil |
#10 · Zasláno: 27. 8. 2015, 10:31:09
juriad:
Perfektní! Díky moc! |
||
Časová prodleva: 10 let
|
0