Moje hranie sa s mod-rewrite je ako dráždenie šelmy

Opäť som upravoval nastavenia, ktoré zabezpečujú preklad z už nepoužívaných pevných adries článkov na nové.
Pôvodný systém fungoval tak, že zo starej adresy sa do skriptu dostávali *iba názvy článkov.* Potom som tabuľkou porovnával názvy a ak sa niečo našlo, tak som zobrazil článok na novej adrese. To malo rôzne problémy najmä v tom, že veľa serverov si neviem prečo uschováva skomolené pevné adresy.
Včera som solídne otravoval Arthura s PHP, dal mi veľa dobrých rád, ktoré som využil pri budovaní toho premúdrelého PHP skriptu aby čo najmenej ľudí dostávalo z vyhľadávačov 404 hlásenie.
Tentoraz som s pomocou guru z ambience upravil mod-rewrite tak, aby mi do skriptu posielal *čísla článkov.* Pôvodné pevné adresy ich obsahovali. Tabuľku mám teraz novú s položkami – adresa nového článku k číslu článku v starom systéme.
Takto by to už malo pracovať aj v prípadoch, že je pôvodná stará pevná adresa skomolená a jediné nezmenené je číslo článku napr. /archives/000123.html a podľa toho už skript vie z tabuľky nájsť článok. Ak ho už takto nenájde, tak zobrazí hlásenie o nenájdení.
Výsledkom je radikálne zníženie zobrazení 404, ktoré sa už obmedzuje na staré články, ktoré som ešte nevygeneroval.
Preto si ako výraz vďaky pozrite:
* Arthur Dent na blog.sme
* dusoft na ambience
* mekelleho perepúť (za tie sprosté reči o tom, že sa mu odkazy v článkoch na Spravodaj zobrazujú ako 404

Written by rony

3 komentáre

2ge

[1] to s mod_rewritom az tak vela nema. Zalezi ako to chces spravit (co je default adresa), ci s www, alebo bez www. Najjednoduchsie a najhorsie riesenie je pouzivat obidve, to znamena ze definujes ServerAlias v httpd.conf
+ mod rewrite riesenie:
RewriteCond %{HTTP_HOST} !^www.opensubtitles.org
RewriteRule ^(.*) http://www.opensubtitles.org$1 [L,R=301,QSA]
(inymi slovami ak nieco nezacina na http://www.opensubtitles.org presmeruj ho tam)
+ uzitocny mod_rewrite:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^/(.*)$ /index.php?q=$1 [L,QSA]
ak ziadany subor neexistuje, tak ho presmeruj na index.php
Pre LightHTTP sa to riesi inak.

Comments are closed.