.htaccess: Adăugați, eliminați sau modificați extensiile

Un cititor a întrebat recent cum să adăugați sau să eliminați .htmlextensia de fișier din diferite adrese URL in .htaccess. Soluția se găsește, desigur, în modulul de rescriere miraculoasă al lui Apache, mod_rewrite. Folosind câteva RewriteRuledirective bine scrise în fișierul htaccess al directorului rădăcină sau țintă al site-ului dvs., modificarea extensiilor de fișiere în URI -uri este relativ simplă. Acest tutorial explică cum se face.

Adăugarea extensiilor de fișiere

Strict pentru pasionații de copy-and-paste, iată un exemplu de cod complet pentru adăugarea extensiilor de fișiere prin .htaccess :

Pare destul de ușor? Poate, dar haideți să aruncăm o privire mai atentă, doar pentru lovituri..

Prima linie, inițializați fișierul Apache mod_rewrite. Apoi, la începutul fiecărei linii ulterioare, invocăm RewriteRuledirectiva puternică, care instruiește serverul să se potrivească cu toate instanțele primului șir și să o aplice conform modelului descris în al doilea șir. În cele din urmă, încheiem fiecare rând prin returnarea unui 301cod de stare, informând astfel motoarele de căutare și alți clienți că schimbarea adresei este permanentă. Rețineți că fișierele țintă trebuie să existe pe server pentru a putea funcționa (adică resursele inexistente ajung să fie erori 404).

Săpănd puțin mai adânc în șirurile țintă și model, vedem că am specificat trei directoare, businesspleasure, și content. Simbolul caret ( ^) și semnul dolar ( $) care înfășoară fiecare nume de director indică pur și simplu începutul și, respectiv, sfârșitul șirului. După ce s- RewriteRulea potrivit cu unul dintre directoarele țintă, adresa URL este rescrisă conform șirului de model specificat. Pentru fiecare dintre directoarele din exemplu, șirul de model este pur și simplu numele directorului cu tipul de fișier dorit adăugat la sfârșit.

Personalizarea și utilizarea acestui cod este simplă. Folosind câte linii este necesar, specificați toate directoarele pentru care doriți să adăugați o extensie de fișier. Apoi, în șirul de model, specificați numele fișierului pe care doriți să-l utilizați, împreună cu extensia de fișier asociată. Pentru a rescrie numele directorului ca fișier într-un alt director, pur și simplu schimbați /pattern.phpla /keyword/pattern.phpsau ceva nebunesc precum /greedy/seo/keyword/pattern.php. Depinde în întregime de tine.

Eliminarea extensiilor de fișiere

Din nou, pentru toți câinii de tip copy-and-paste de acolo, iată un exemplu de cod complet pentru eliminarea extensiilor de fișiere prin .htaccess :

Acum că am văzut un exemplu generalizat, să-l descompunem…

Mai întâi, pornim Apache’s mod_rewrite. Apoi, invocăm puterile magice ale RewriteRuledirectivei și procedăm la declararea șirului nostru țintă. În exemplu, vizam trei tipuri de fișiere diferite, .html.htmși .php. Fiecare dintre aceste tipuri de fișiere apare după un operator wildcard ( (.*)) pentru a potrivi orice fișier cu o astfel de extensie. În cele din urmă, specificăm începutul și sfârșitul șirului țintă cu un simbol caret ( ^) și respectiv semnul dolar ( $). În acest moment, dacă personalizați codul pentru uzul dvs., înlocuiți extensiile enumerate cu cea pe care ați dori să le eliminați. Ca și înainte, rețineți că fișierele țintă trebuie să existe pe server pentru ca această tehnică să funcționeze.

Acum că ne-am definit șirurile țintă, dorim să specificăm modelele de rescrie ale acestora. În exemplu, presupunem că fișierele țintă sunt localizate în directorul rădăcină al site-ului (adică, http://domain.tld/). Având în vedere că dorim să eliminăm extensiile fișierelor țintă și nu dorim să le schimbăm locația reprezentată, pur și simplu adăugăm numele fișierului potrivit la domeniul nostru specificat folosind variabila de rescriere, $1. Această variabilă reprezintă doar porțiunea șirului țintă care este potrivită cu operatorul wildcard ( (.*)). Astfel, numele fișierului fără extensie este potrivit și ulterior rescris ca subdirector al domeniului nostru țintă.

Partea finală din fiecare dintre directivele noastre de rescriere asigură că rescrierea noastră returnează 301coduri de stare prietenoase cu SEO. Prin returnarea unui 301cod pentru fiecare rescrie, le spunem efectiv motoarelor de căutare, browserelor și altor clienți că schimbarea adresei este permanentă. Transmiterea unor astfel de informații către motoarele de căutare asigură faptul că paginile dvs. păstrează valoarea legăturilor lor de intrare. 301, copil… 301.

Schimbarea extensiilor de fișiere

Nu în ultimul rând, să ne uităm rapid la o tehnică similară pentru schimbarea extensiilor de fișiere. Iată punchline:

Logica folosită aici este, în esență, aceeași cu cele două tehnici anterioare (adăugarea și eliminarea extensiilor), așa că nu o voi trece din nou. Singura diferență reală este adăugarea tipului de fișier dorit pe fiecare dintre căile țintă. Deci, cu acest cod în loc, se vor întâmpla următoarele redirecționări (în ordine):

  • Fiecare cerere pentru un fișier este redirecționată către fișierul .htmlcu același nume.axe
  • Fiecare cerere pentru un fișier este redirecționată către fișierul .htmcu același nume.biz
  • Fiecare cerere pentru un fișier este redirecționată către fișierul .phpcu același nume.yay

Din nou, logica din spatele acestor directive este explicată în oricare dintre cele două tehnici anterioare, astfel încât să le puteți verifica pentru mai multe detalii despre cum funcționează aceste rescrieri. Și, desigur, nu uitați să testați temeinic și să faceți copii de siguranță bune ale fișierelor înainte de a face orice modificare; în acest fel, dacă se întâmplă ceva neașteptat, puteți reveni la setul de fișiere de lucru anterior. Deci da.. sunt vremuri bune să redirecționezi lucrurile cu .htaccess ;)

Tehnica alternativă

Iată o tehnică alternativă pe care un cititor a sugerat-o pentru a adăuga .htmlextensii de fișiere:

Nu l-am testat personal, dar pare legal din față. Iată cum funcționează logica:

  1. Verificați dacă fișierul solicitat nu există
  2. Verificați dacă directorul solicitat nu există
  3. Verificați dacă versiunea .htmlfișierului solicitat există
  4. Dacă toate aceste trei condiții sunt îndeplinite, atunci redirecționați toate solicitările către .htmlțintele lor

Lucrul tare despre această metodă este că verifică mai întâi dacă fișierul țintă există înainte de a rescrie adresa URL. Ceva de integrat poate într-una dintre tehnicile anterioare pentru o gestionare mai robustă a cererilor. Amintiți-vă să păstrați întotdeauna copiile de rezervă sănătoase și să testați temeinic înainte de a începe orice.

Aveti nevoie de ajutor cu Linux Server sau WordPress?