Autor Zpráva
Miloš
Profil
Přeuspořádávám web, který spravuji. Když jsem ho zdědil, byly všechny texty a nahrávky jedné kategorie umístěné v tomtéž adresáři, což zpočátku nevadilo, ale s přibývajícími roky se v dotyčném adresáři nashromáždilo přes 800 souborů, takže docela brajgl. Cosi nasvědčuje už jen když se snažím dotyčný adresář přes FTP otevřít – chvíli to trvá, než se načte seznam všech souborů.

Od letoška jsem pro nové záznamy udělal adresář 2014.
Rád bych totéž udělal i se všemi dosavadními soubory; nebyl by problém to celé roztřídit, ale problém pochopitelně nastane, bude-li někdo uvedené stránky hledat třeba pomocí Googlu.

Jako rozumnou cestu vidím redirect 301 (moved permanently) zapsaný v .htaccess. Jak přesně to mám zapsat?

Původní soubory jsou dvojího (resp. trojího) typu: php, mp3 a rtf (rtf byly před php, časem z nich ze všech udělám php, aby si lidi ty texty nemuseli stahovat).
• PHP soubory se jmenovaly YYYY_MM_DD.php (např 2000_11_19.php) a přesouvám je do YYYY jako MM_DD.php (tedy např. 2000/11_19.php)
• MP3 soubory se jmenovaly kazYYMMDD_x{2,}.php (tedy např. kaz100117_jfp.mp3, kaz101010_jfp_DE.mp3 nebo kaz101128_lr.mp3) a přesouvám je opět do adresáře s příslušným rokem a v názvech souborů vynechávám YY
• Pro RTF soubory platí pravidla shodná pro MP3

První, co mě napadlo, bylo vypsat je všechny do souboru .htaccess takto:
Redirect permanent /2013_01_01.php /2013/01_01.php
Redirect permanent /2013_01_06.php /2013/01_06.php
Redirect permanent /2013_01_13.php /2013/01_13.php
Redirect permanent /2013_01_20.php /2013/01_20.php
...
1) Je to tak správně, nebo musím uvést i to 303? A pokud, tak jak to mám přesně napsat?
2) Lze použít relativní adresy? Když jsem hledal informace, viděl jsem vždycky novou adresu zapsanou absolutně.
3) Nebude délka .htaccess (přes 800 řádků) zpomalovat web? Neboli nešlo by to zapsat nějak rozumněji pomocí masky? Pokud ano, jak? Jde i o to, že to celé nezvládnu najednou, soubory budu přemísťovat pozvolna, takže nemůžu zapnout redirect pro všechny hned naráz. Šel by (tedy pokud to lze zapsat nějakou maskou) udělat zápis pravidla pro každý rok extra?

Případně – pokud existuje ještě nějaký jiný, jednodušší způsob, nijak se mu nebráním.
Tori
Profil
Miloš:
Jde i o to, že to celé nezvládnu najednou, soubory budu přemísťovat pozvolna, takže nemůžu zapnout redirect pro všechny hned naráz.
Je na přesun každého souboru vázaná další akce? (např. editace záznamu v DB, přesun ještě nějakých obrázků apod.) Šlo by to možná vyřešit hromadně a přesunout je skriptem. Alternativní postup - napřesunovat je, ale najdřív je zkopírovat na nové místo, po zkontrolování, že je vše ok, nastavit přesměrování, pak staré soubory smazat.
Hromadný redirect podle masky viz RedirectMatch
candiess
Profil
Miloš:
Tak jej nezapisuj skrze .htaccess ale posílej HTTP hlavičku 301.
Miloš
Profil
Tori:
Ne, žádná databáze, všechno edituji ručně v PSPadu. Jde hlavně o to, že nechci vexlovat s těma ertéefkama – rád bych je převedl do PHP, aby ty texty byly normálně přístupné v prohlížeči, ale to je práce opravdu na dlouho, protože to dělám ve volném čase. Jinak se to samozřejmě dá udělat všechno najednou.
A ano, nejprve je kopíruju (kopie jen přejmenuju); u MP3 žádný problém, akorát uvnitř PHP souborů musím přepsat include hlavičky a patičky). Smazat ty původní jsem opravdu měl v úmyslu až v případě, když to bude fungovat.

Hromadný redirect podle masky viz RedirectMatch
Už jsem dlouho tyhle věci nedělal, připadám si teď spíš jako údržbář a dost věcí, které jsem dřív uměl docela slušně, teď musím hledat a luštit – obzvlášť luštění v anglických textech nemám rád, protože jsem se anglicky nikdy neučil, takže to musím dost složitě luštit. Je to ode mě moc smělá prosba, abys mi napsal, jak konkrétně to tam mám zapsat? Názvy souborů viz výše.



candiess:
Kam ji mám napsat? Myslíš jako že na místě původních osuborů nechám téměř prázdné soubory jen s přesměrováním? To by určitě šlo u PHP souborů, ale nejsem si jistý, jak bude server reagovat v takovém případě na php uvnitř souborů s příponou mp3.
A konečně svůj účel by to splnilo jen částečně, protože bych sice soubory měl roztříděné, ale na původním místě by mi stejně zbyl dosavadní bor*** (ehm, nevěstinec…).
candiess
Profil
Miloš:
No myslel jsem to tak, že můžete veškeré požadavky směřovat na nějaký třídič.php, který by kontroloval, jestli soubor existuje a kdy by neexistoval, odeslal by žadateli kod 301.

Zápisem:
RewriteEngine On
#pokud je to zanorene v nejakem adresari, uvedte ho za /
RewriteBase /
#ignoruj vsechny opravdove adresare
RewriteCond %{REQUEST_FILENAME} !-d
#ignoruj vsechy opravdove soubory (php skripty, obrazky, styly)
RewriteCond %{REQUEST_FILENAME} !-f
#vsechno ostatni necha vygenerovat index.php (ten se musi rozhodnout podle promenne url, zda stranka existuje a jaky ma mit obsah)
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

by se vám veškeré požadavky posílaly na index.php s parametrem url, ten byste si uvnitř skriptu kontroloval a třídil dle libosti.
Petr ZZZ
Profil
Reaguji na Miloše:
„Jde i o to, že to celé nezvládnu najednou, soubory budu přemísťovat pozvolna, takže nemůžu zapnout redirect pro všechny hned naráz.“

A nemohl bys

1. postupně soubory na novou adresu jen zkopírovat,
2. teprve až budou všechny zkopírované, vyřešit redirect a
3. až potom smazat soubory na původní adrese?

Jinak řečeno – temporární duplicity něčemu vadí? Dokud na nové adresy nebudou směřovat odkazy, není snad potřeba řešit otázku, co na duplicity řeknou vyhledávače, a dokud soubory nebudou na starých adresách smazané, není přece třeba řešit přesměrování.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: