Autor | Zpráva | ||
---|---|---|---|
davchy Profil |
#1 · Zasláno: 23. 10. 2005, 23:03:16 · Upravil/a: davchy
Na stránkách mám generované odkazy typu: ………/products/kosmetika-vivien-parfum-Arrogance-seznam-1.html (význam nese jednička, která je ID produktu, před „-1“ může být v odkazu cokoliv)
Přepsaný odkaz by měl být: ……../index.php?main_page=product_info&products_id=1 Prošel jsem na netu kdeco, ale zprovoznit funkční pravidlo se mi nepovedlo. Jak by pravidlo mělo být? Budu vám zauzlován. Díky moc. Jen upřesňuji, že jiná pravidla mi fungují. Poslední pokus byl tento: RewriteRule ^products/(.*)-seznam-(.*)\.html /index.php?main_page=product_info&products_id=$1 [L] Přepsalo mi to takto: ……../index.php?main_page=products_general_info&products_id=eaeaface Ani nevím, kde se tam vzalo to „general“ a o ID snad ani nemluvě. Ještě jednou děkuji za jakoukoliv případnou radu. |
||
Kajman Profil * |
#2 · Zasláno: 24. 10. 2005, 00:24:33
Zkus tohle.
RewriteRule ^products/(.*)-seznam-([0-9]+)\.html$ /index.php?main_page=product_info&products_id=$2 [L] To dolar číslo je pořadí otevírací závorky, kterou chceš vycucnout. General je divnost, nemělo by to tam být. |
||
davchy Profil |
#3 · Zasláno: 24. 10. 2005, 00:48:34
Funguje to, díky moc. Hlavně i za vysvětlení.
|
||
davchy Profil |
#4 · Zasláno: 24. 10. 2005, 09:13:34 · Upravil/a: davchy
Ještě k tomuto jeden dotaz:
Nevím proč, ale při každém novém otevření okna prohlížeče a prvním kliknutí na upravovaný odkaz, se za .html přidá něco na způsob &zenid=22587e2563a58785d…. atd. Za použití uvedeného pravidla to pak nefunguje. Když ale na odkaz kliknu podruhé a po xté, tak už se za .html nic nedoplní a vše funguje dobře. Napadlo mě (jen logickou cestou, nijak tomu nerozumím) z pravidla odstranit $ za .html a pak už to fungovalo i na to první kliknutí, i když se tam připojilo to zenid. Podle mě by se tam ale nic připojovat nemělo. Neporadíte, proč se to tak chová? Připojuji i funkci, která se stará o generování odkazů. Je tam voláno url_data.php, kde není nic jiného, něž definování zobrazovaných odkazů. Příklad:
Tady je ta funkce:
|
||
davchy Profil |
#5 · Zasláno: 24. 10. 2005, 09:21:02
Trochu jsem to přetáhl, tak ještě zbytek kódu: (pár řádků se překrývá)
Děkuji za pomoc |
||
Kajman Profil * |
#6 · Zasláno: 24. 10. 2005, 14:09:19
Měla by pomoci malá úprava.
RewriteRule ^products/(.*)-seznam-([0-9]+)\.html$ /index.php?main_page=product_info&products_id=$2 [L,QSA] QSA - přidá hodnoty z query stringu z původní adresy k tomu novému |
||
Kajman Profil * |
#7 · Zasláno: 24. 10. 2005, 14:14:28
Aha, ... ale to by se to zenid mělo přidávat za ?. Takže to asi fakt dělá nepřesné adresy někde v té funkci.
|
||
Kajman Profil * |
#8 · Zasláno: 24. 10. 2005, 14:23:22
Asi bude tedy třeba před
return $link; napsat ještě if(strpos($link,'?')===false) $link=str_replace('&','?',$link,1); |
||
davchy Profil |
#9 · Zasláno: 24. 10. 2005, 14:35:00
No jo, jenže to pak hodilo:
Warning: Wrong parameter count for str_replace() :( |
||
Kajman Profil * |
#10 · Zasláno: 24. 10. 2005, 15:07:50
Tak to asi jde jen v php5 :-)
Ještě by to mohlo jít takto nějak... if(strpos($link,'?')===false && strpos($link,''&')!==false) $link= substr_replace($link,'?',strpos($link,''&'),5); Nebo tak nějak. Prostě je potřeba nahradit první výsky & otazníkem, pokud tam už otazník není. |
||
davchy Profil |
#11 · Zasláno: 24. 10. 2005, 15:33:52
Chybu už to nehlásí, teda hlásilo, ale ''&' jsem upravil na '&' Problém ale trvá, jen se "&" nahradilo "?", tedy odkaz je takto:
kosmetika-vivien-parfum-Destiny-seznam-590.html?zenid=0c9be7e6850605b1 ee9fb432b6d5d26a Za ".html" ale už prostě nic být nesmí. Je ale zvláštní, že se to tam u odkazů zobrazuje jen při novém otevření okna a prvním kliku. Pak už všechno správně končí ".html" |
||
Kajman Profil * |
#12 · Zasláno: 24. 10. 2005, 15:42:13
Pokud tam už je ten ? tak by to mělo být s tím QSA bez problémů. Tu proměnnou to tam asi dává, že si ještě není systém jistý, že klient akceptuje cookies.
|
||
davchy Profil |
#13 · Zasláno: 24. 10. 2005, 16:02:20
Tak to už v tom případě je vyřešený problém. Děkuji za čas.
|
||
Lukáš M Profil |
#14 · Zasláno: 24. 10. 2005, 19:41:53
zdravím a rovněž mnohokrát děkuji! na této diskusi jsem se "přiživil" a odvodil si následující pravidlo:
RewriteRule ^(.*)-([0-9]+)/(.*)-([0-9]+)\.html$ index.php?rid=$2&id=$4 [L] podle mě je to jedno z potencionálně nejzajímavějších přesto jsem jej jako vzorové ani nějaký příklad, který by na něj vedl, hledal marně. ale asi to bude také dost tím, že jsem na "linuxoidní" (což regexp určitě jsou) věci lamka a při slovním spojení "regulární výrazy" dostávám už od maturitního ročníku vyrážku :) |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0