Autor | Zpráva | ||
---|---|---|---|
Prkny Profil |
#1 · Zasláno: 13. 9. 2008, 12:07:53
Zdravím,
uvažuji udelat rewrite na stávající web. Zatím řeším teorii. Mám stávající web klasika "soubor.php?promena=12345" , kdyz udelam rewrite (teorie) treba neco jako "www.domana.cz/hezka-url-12345", 1) stavajcíí soubor a adresa bude fungovat ? 2) dá se stavající adresa přeposlat na hezkou adresu ? jde o to aby kdyz uzivatele i vsude na internetu mam puvodni adressy typu soubor.php?promena=12345 tak aby i tyto uzivatele se dostali na puvodni adresu JDe to nejak resit a jak ? Předem díky ... |
||
pEeLL Profil |
#2 · Zasláno: 13. 9. 2008, 12:29:05
myslim ze tady najdes odpovedi
http://www.jakpsatweb.cz/server/mod-rewrite.html |
||
Prkny Profil |
#3 · Zasláno: 13. 9. 2008, 20:27:05
ok, diky pročetl jsem to cele, ale presto mám problém a nevím jak mám zajistit aby i puvodní stare osklivé jeste nejaky cas fungovali ?
Tudíž přesměrovali na hezkou adresu? přemýšlím že bych to měl asi udělat přímo na začátku skriptu soubor.php?promena=12345 ale jak ? nebo to jde udelat přímo v .htaccess ? |
||
srigi Profil |
#4 · Zasláno: 14. 9. 2008, 00:29:41
Malo by to ist v pohode, len to URL www.domena.cz/hezka-url-12345, ten retazec hezka-url- sa nesmie menit!
RewriteRule ^.*\/promnena=(.*)$ www.domena.cz/hezka-url-$1 [R=301] |
||
BetaCam Profil |
#5 · Zasláno: 14. 9. 2008, 00:59:45
srigi
„Malo by to ist v pohode, len to URL www.domena.cz/hezka-url-12345, ten retazec hezka-url- sa nesmie menit!“ Pochybuji, že by se neměnil. Většinou se používa třeba www.domena.cz/tady-je-nazev-clanku-12548 Kde 12548 je jedinečné ID nejakého článku. Takovéhle věci se musí řěšit na úrovni aplikace. Tedy samozdřejmě pokud autor nechce URL ve tvaru www.domena.cz/clanek-(id) |
||
Prkny Profil |
#6 · Zasláno: 14. 9. 2008, 15:50:35
jasné je že "hezka-url" se bude měnit ...
takže chapu, že přesměrování se provede na začátku skriptu php... muzete mi pomoci zřejmě se to bude řešit podmínkou něco jako kdyz nazev adresy je soubor.php?promena=neco --- přesměruj na cool url... ale jak otestuji tuto url adresu ? |
||
BetaCam Profil |
#7 · Zasláno: 14. 9. 2008, 17:31:24 · Upravil/a: BetaCam
Prkny
Takovej nástin $url = 'soubor.php?promena=123456'; if (preg_match('/soubor\.php\?promena=([0-9]*)/', $url, $matches)) { $result = mysql_query('SELECT id, title FROM tabulka WHERE id='.$matches[1].' LIMIT 1'); $data = mysql_fetch_assoc($result); header("HTTP/1.1 301 Moved Permanently"); header("Location: /".$data['title']."-".$data['id']); header("Connection: close"); exit; } místo $url si dáš asi $_SERVER['REQUEST_URI']. $data['title'] si ošetříš tak jak ošetřuješ tvoje url. |
||
Prkny Profil |
#8 · Zasláno: 14. 9. 2008, 18:26:12 · Upravil/a: Prkny
BetaCam diky moc
nyní řeším samotný .htaccess potřebuji rewritovat celkem tři soubory ale moc mi to nejde ... mám 1) www.domena.cz/nazev-zbozi-423.html - řeší soubor nazev.php?id=423 2) www.domena.cz/katalog-regály/ - řeší soubor katalog.php?kat=regaly 3) www.domena.cz/katalog-regaly/drevene/ - řeší soubor katalog2.php?kat=regaly$podkat=drevene 4) www.domena.cz/katalog-regaly/drevene/barevne/ - řeší soubor katalog2.php?kat=regaly$podkat=drevene$podkat2=barevne za nadpisem katalog nemusi byt "-" muze byt "/" Zatím mám něco takového: RewriteEngine On RewriteBase / RewriteRule ^(.*).html nazev.php?id=$1 RewriteRule ^katalog-(.*)/ katalog.php?kat=$1 RewriteRule ^katalog-(.*)/(.*)/ katalog2.php?kat=$1&podkat=$2 RewriteRule ^katalog-(.*)/(.*)/(.*) katalog2.php?kat=$1&podkat=$2podkat2=$3 ale moc mi to nefunguje, prosím o pomoc |
||
BetaCam Profil |
#9 · Zasláno: 14. 9. 2008, 19:02:06
RewriteEngine On RewriteRule ^(.*)-([0-9]*)\.html$ nazev.php?id=$2 [L, QSA] RewriteRule ^katalog-(.*)/$ katalog.php?kat=$1 [L, QSA] RewriteRule ^katalog-(.*)/(.*)/$ katalog2.php?kat=$1&podkat=$2 [L, QSA] RewriteRule ^katalog-(.*)/(.*)/(.*)/$ katalog2.php?kat=$1&podkat=$2podkat2=$3 [L, QSA] |
||
Časová prodleva: 3 dny
|
|||
Prkny Profil |
#10 · Zasláno: 17. 9. 2008, 18:11:10
„RewriteEngine On“
„RewriteRule ^(.*)-([0-9]*)\.html$ nazev.php?id=$2 [L, QSA]“ „RewriteRule ^katalog-(.*)/$ katalog.php?kat=$1 [L, QSA]“ „RewriteRule ^katalog-(.*)/(.*)/$ katalog2.php?kat=$1&podkat=$2 [L, QSA]“ „RewriteRule ^katalog-(.*)/(.*)/(.*)/$ katalog2.php?kat=$1&podkat=$2podkat2=$3 [L, QSA]“ Bohuzel toto nefunguje. Píše to chyba serveru. Nastala vnitřní chyba ..... Bud je server pretizen nebo doslo k chybe v CGI skriptu. Error 500 |
||
Prkny Profil |
#11 · Zasláno: 18. 9. 2008, 11:04:23 · Upravil/a: Prkny
může mi nekdo pomoci ?
hází to chybu Error 500, pokud odendám místo [L, QSA] a necham pouze [QSA] tak to chybu 500 neháže. na co je to "L" ? Druhý problém pokud tam nemám L tak ve třetí podmínce: tak odkazuji na www.domena/katalog-regaly/drevené/ - kliknu a v adresnim radku to hleda www.domena/katalog-regaly/drevené/index.php Proc tam pridava dodatek index.php ?? Díky tomu vyskočí Error 404 ... |
||
BetaCam Profil |
#12 · Zasláno: 19. 9. 2008, 05:31:54
Prkny
„hází to chybu Error 500, pokud odendám místo [L, QSA] a necham pouze [QSA] tak to chybu 500 neháže. na co je to "L" ?“ "L" říká dál už nic nepřepisuj. Error 500 to vyhazovalo z mé chyby zápisu a jelikož sem ten zápis množil copy&paste stylem tak sem tam tu chybu nasekal celkem 4x. Místo [L, QSA] mělo být [L,QSA]. Další chyba tam byla u posledního pravidla kde mezi "podkat=$2" a "podkat2=$3" chyběl & Jinak sem ti ty pravidla přepsal na dvě varianty použít můžes tu, která ti bude víc vyhovovat. Varianta 1 : RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^(.*)-([0-9]*)\.html$ RewriteRule ^(.+[^/])$ /$1/ [R=301,L] RewriteRule ^(.*)-([0-9]*)\.html$ /nazev.php?id=$2 [L,QSA] RewriteRule ^katalog-([a-z]*)/$ /katalog.php?kat=$1 [L,QSA] RewriteRule ^katalog-([a-z]*)/([a-z]*)/$ /katalog2.php?kat=$1&podkat=$2 [L,QSA] RewriteRule ^katalog-([a-z]*)/([a-z]*)/([a-z]*)/$ /katalog2.php?kat=$1&podkat=$2&podkat2=$3 [L,QSA] Varianta 2: RewriteEngine On RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^(.*)-([0-9]*)\.html$ RewriteRule ^(.+[^/])$ /$1/ [R=301,L] RewriteRule ^(.*)-([0-9]*)\.html$ /nazev.php?id=$2 [L,QSA] RewriteRule ^katalog-(.[^/]*)/$ /katalog.php?kat=$1 [L,QSA] RewriteRule ^katalog-(.[^/]*)/(.[^/]*)/$ /katalog2.php?kat=$1&podkat=$2 [L,QSA] RewriteRule ^katalog-(.[^/]*)/(.[^/]*)/(.[^/]*)/$ /katalog2.php?kat=$1&podkat=$2&podkat2=$3 [L,QSA] Varianta 1 schroustne jen znaky "a-z" u katalogů a Varianta 2 schroustne u katalogů všechny znaky krom "/". Další věc je, že by možná stálo zato upravit pravidlo ^(.*)-([0-9]*)\.html$ protože při tomto pravidlu projde klidně třeba : www.example.com/sdf%3C%3E*$××÷¤ß$s-df/sd+fs/dfs/df-123.html což asi neni uplně ideální. Navíc sem ti do obou variant dal pravidlo pro přesměrování adresi bez lomítka na adresu s lomítkem s kódem 301. Doufám, že ted už ti to bude fungovat. :) |
||
Prkny Profil |
#13 · Zasláno: 19. 9. 2008, 18:54:37
Beta Cam jsi machr ....
tet nemam moznost vse otestovat ... ale vypada to opravdu super... s tou adresou s html mas pravdu ... zkusim to osefovat v souboru nazev.php |
||
Časová prodleva: 10 dní
|
|||
Prkny Profil |
#14 · Zasláno: 29. 9. 2008, 10:28:18 · Upravil/a: Prkny
funguje to naprosto dokonale ... az na jednu chybicku ...
pokud zaradim vetu na pridavani / (teda myslim ze to je veta na pridavani lomitek) RewriteRule ^(.+[^/])$ /$1/ [R=301,L] je problem s pravidlem RewriteRule ^(.*)-([0-9]*)\.html$ /nazev.php?id=$2 [L,QSA] jelikoz me presmeruje na neco jako www.domena.cz/nazev-zbozi-723.html/index.php/index.php/index.php/ |
||
BetaCam Profil |
#15 · Zasláno: 30. 9. 2008, 11:09:13 · Upravil/a: BetaCam
Prkny
„/nazev-zbozi-723.html/index.php/index.php/index.php/“ Pokud používáš rewrite měl by si v aplikaci používat absolutní adresování!!! Ten naskakující index.php je jasná známka toho, že klikáš na odkaz který je v aplikaci naspán relativně. „je problem s pravidlem RewriteRule ^(.*)-([0-9]*)\.html$ /nazev.php?id=$2 [L,QSA]“ Není. Pravidlo je v pořádku pro případ který si zde uvedl. „jelikoz me presmeruje na neco jako“ No to s velkou pravděpodobností ne. To pravidlo pouze podstrkává nikam nic nepřesměrovává. „www.domena.cz/nazev-zbozi-723.html/index.php/index.php/index.php/“ Jak sem řekl pravděpodobně tam máš někde relativní adresování. ohledně doplnování lomítek koukám, že minule sem tam zapoměl dát parametr NE, ale to na funkci ve většině případů nemá vliv : RewriteCond %{ENV:REDIRECT_STATUS} ^$ RewriteCond %{REQUEST_URI} !^(/css/|/images/|/([a-zA-Z0-9-]*)\.html$) RewriteRule ^(.+[^/])$ /$1/ [R=301,L,NE] pokud používáš doplňování lomítek nezapomeň že musíš také nastavit pravidlo kam se lomítka nemaj doplňovat. Pokud to vemu po řádcích tak : 1. Ochrana proti zacyklení 2. Pokud REQUEST_URI začíná na /css/ nebo /images/ nebo začíná na / a libovolný počet alfanumerických znaků nebo pomlček a končí na .html nepřidávej nakonec lomítko ve všech ostatních případech pridej lomítko 3. Redirect s kódem 301 na varianu s lomítkem Pokud se doplňují lomítka nikdy se nesmí zapomenout vyřadit z doplňování věci do kterých lomítka nepatří. Já téměř v 99.99% případů vyřazuju adresář /images /js a /css další věci pak už záleží na situaci. |
||
Časová prodleva: 16 let
|
0