| 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=$3Moc 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: 11 let
|
|||
0