Dainuok su Karlu - „Die letzte Kompanie“ [Pirmojo pasaulinio karo daina] [Vertimas į anglų kalbą]

Turiu didelę svetainę (15 000 puslapių) su žurnalų peradresavimų sąrašu (apie 800), kurie daugelį metų buvo naudojami rinkodaros kūriniuose. Mano „Apache“ serveris maždaug pastaruosius 10 metų vykdė mod_rewrite, kad priverstų visas užklausas rašyti mažosiomis raidėmis. Taigi vartotojas galėtų įdėti / CamelCase, o „Apache“ jį perskaitytų kaip / camelcase ir mano atitinkamas peradresavimas veiktų.

Mėnesio pabaigoje pakeičiu savo svetainę į „Drupal“ ir serveris turi tapti didžiosiomis ir mažosiomis raidėmis. Aš maniau, kad galiu naudoti mod_spelling savo peradresavimų sąraše, kad žmonės galėtų toliau įvesti URL, kad ir kaip jie pasirinktų, ir jis veiks toliau. Tačiau „Mod_spellin“ nenuskaito peradresavimų sąrašo, todėl neveikia.

Turiu pakankamai darbuotojų, kad galėčiau juos peržiūrėti peradresavimų sąraše ir pridėti bet kokiais atvejais didžiausią reikšmę skiriantiems variantams, tačiau tai ir taip padidintų mano peradresavimų sąrašą 2–4 kartus. Tikiuosi, kad man nereikės eiti tuo keliu. Pamaniau, kad gali būti būdas naudoti mod_rewrite, kad būtų galima išbandyti įvairius atvejus nukreipiant, bet negaliu nieko veikti.

Taigi, ar kas turi idėjų?

  • Kai sąrašas bus toks ilgas, laikas nuvalyti standartinį „RewriteMap“ šabloną su „prg: script“. Perlui puikiai seksis kaip kalba. Lengviausias dalykas yra tai, kad visi pataisymai bus laikomi D / B, o vietinę talpyklą - „Perl“ žemėlapio talpykloje. Jei norite daugiau informacijos, galiu pateikti konkretesnį atsakymą. Toks sprendimas čia yra toks pat tinkamas.
  • 1 Rytą praleidau skaitydamas apie „RewriteMaps“ ir dažniausiai esu įsitikinęs, kad pataisymus galėčiau tiesiog įdėti į DBM maišos failą. Koks būtų prg: script naudojimo pranašumas?
  • Būtų naudingiau, jei atnaujinimą pateikiate kaip atsakymą ir pažymite jį, kad patektumėte į žiniatinklio valdytojus, nes manau, kad tai geriau.

Atlikęs keletą tyrimų, esu tikras, kad naudosiu tik „RewriteMap“, kuriame bus visi atvejų variantai. Reikės šiek tiek padirbėti, kad sukurtume didžiąją dalį galimybių, kurią žmonės gali panaudoti, tačiau tol, kol galėsiu pasiekti 90% jų, manau, kad tai sėkminga. Turintiems panašių problemų, aš dokumentuosiu, kaip tai daroma.

Pradėkite nuo perrašymo žemėlapio failo sukūrimo. Tai tik teksto failas serveryje su išvardytais atvejų variantais.

## case_variants.txt CamelCase camelcase CAMELCASE camelcase 

Kadangi tai sąrašas, kurio nereikės dažnai atnaujinti, konvertuojau jį į DBM maišos failą, kad „Apache“ galėtų jį indeksuoti ir greičiau pasiekti norimą raktą. Norėdami tai padaryti, ši komanda buvo paleista serveryje kaip root.

$ httxt2dbm -i /etc/httpd/case_variants.txt -o /etc/httpd/case_variants.map 

Dabar atnaujinu „Apache“ direktyvas, kad patikrinčiau šį žemėlapio failą, ir, jei reikia, perrašau užklausą iš naujo. Atminkite, kad šis sakinys negali būti katalogo sakinyje.

RewriteEngine on RewriteMap case2check dbm:/etc/httpd/case_variants.map # if I wanted to use the text file instead, uncomment the following line # RewriteMap case2check txt:/etc/httpd/case_variants.txt RewriteRule ^/(.*)$ /$case2check:$1 [PT] 

Visa tai ir dar daugiau paaiškinta „Apache“ žemėlapio perrašymo puslapyje. Jei ko nors praleidau arba mano procesas gali būti patobulintas paskelbus žemiau.

Pirmiausia raktui, perduodamam perrašymo žemėlapyje, galima pritaikyti „mažųjų raidžių“ atvaizdavimą.

RewriteMap permredirects 'dbm:/path/to/dbm/file.map' RewriteMap lowercase int:tolower RewriteCond ${permredirects:${lowercase:$1}} !='' RewriteRule ^(.*) '${permredirects:${lowercase:$1}}' [L,R=301] 

dirbo už jus: Charles Robertson | Norite su mumis susisiekti?