Nandakumar Edamana
Share on:
@ R t f

ബഹുഭാഷാലിങ്കുകള്‍ എളുപ്പത്തിലാക്കാന്‍ അപ്പാച്ചീ റീറൈറ്റ് റൂള്‍


സ്വന്തം സൈറ്റിന്റെ ഉള്ളടക്കം പല ഭാഷകളില്‍ ലഭ്യമാക്കുന്നത് അല്ലെങ്കിലേ ബുദ്ധിമുട്ടുള്ള കാര്യമാണ് (നാം തന്നെ ശരിക്കിരുന്നു മൊഴിമാറ്റുന്ന കാര്യമാണ് ഉദ്ദേശിച്ചത്, തരികിട മെഷീന്‍ ട്രാന്‍സ്‌ലേഷനല്ല). എന്നാല്‍ ചിലപ്പോഴൊക്കെ ഇതിനേക്കാള്‍ വെല്ലുവിളി നേരിടുക പരിഭാഷ എങ്ങനെ ക്രമീകരിക്കണമെന്ന കാര്യത്തിലാണ്. സോഴ്സ് ഫയലുകള്‍ എങ്ങനെ സൂക്ഷിക്കണം? പല ഭാഷയിലുള്ള പതിപ്പുകളെല്ലാം പരസ്പരം ഒത്തുപോകുന്നുണ്ടെന്ന് എങ്ങനെ ഉറപ്പാക്കാം? സേര്‍ച്ച് എഞ്ചിനുകള്‍ തിരിച്ചറിയുന്ന രീതിയില്‍ ഇതവതരിപ്പിക്കാന്‍ ഏതാണ് നല്ല മാര്‍ഗം? അവസാനമായി, ബഹുഭാഷാ യൂആര്‍എല്ലുകള്‍ ഭംഗിയാക്കുന്നതെങ്ങനെ? അതും സിഎംഎസ്സിലേയും സൈറ്റ് ജനറേഷന്‍ സംവിധാനത്തിലേയുമെല്ലാം പരിമിതികള്‍ മറികടന്ന്?

ബഹുഭാഷാസൈറ്റുകളില്‍ യൂആര്‍എല്ലുകള്‍ക്ക് പല രീതി ഉപയോഗത്തിലുണ്ട്. ഉദാഹരണത്തിന്,

  • https://en.example.com/section/subsection/page
  • https://example.com/section/subsection/page.en.html
  • https://example.com/section/subsection/page?lang=en
  • https://example.com/en/section/subsection/page

ആദ്യം നമുക്ക് ഈ രീതികള്‍ താരതമ്യം ചെയ്യാം. തുടര്‍ന്ന് സൈറ്റ് ജനറേഷ‍ന്‍ രീതി ഏതായാലും ഇഷ്ടമുള്ള യൂആര്‍എല്‍ ശൈലി തെരഞ്ഞെടുക്കുന്നതെങ്ങനെ എന്ന് നോക്കാം.

താരതമ്യം

സബ്‌ഡൊമൈനുകള്‍ അടിസ്ഥാനമാക്കിയുള്ളതാണ് ആദ്യത്തെ രീതി. എത്ര ഭാഷയുണ്ടോ അത്രയും വ്യത്യസ്ത സൈറ്റുകള്‍ നടത്തുകയാണ് സത്യത്തിലിവിടെ ചെയ്യുന്നത്. സങ്കീര്‍ണതയും ചെലവും മൂലം ഏറെ നിരുത്സാഹപ്പെടുത്താറുള്ള ഒരു രീതിയാണിത്. മാത്രമല്ല, ബാക്ക്‌ലിങ്കുകള്‍ അടിസ്ഥാനമാക്കി റാങ്കിങ് നടത്തുന്ന സേര്‍ച്ച് എഞ്ചിനുകളില്‍ സൈറ്റിന് മതിയായ റാങ്കിങ് കിട്ടാതെ പോകാനും ഇത് കാരണമാകും (ലിങ്കെല്ലാം പല സൈറ്റുകളിലേക്കായി ചിതറിപ്പോവുകയാണല്ലോ). അതുകൊണ്ട്, മതിയായ കാരണമില്ലാതെ സബ്‌ഡൊമൈന്‍ രീതി തെരഞ്ഞെടുക്കേണ്ട. ഓരോ ഭാഷയിലെ പതിപ്പിലും ഉള്ളടക്കത്തില്‍ കാര്യമായ വ്യത്യാസമുണ്ടാവുക, പ്രാദേശികമായ ചട്ടങ്ങള്‍ പാലിക്കാന്‍ സൈറ്റ് വിഭജിക്കേണ്ടിവരിക എന്നതൊക്കെയാണ് "മതിയായ കാരണങ്ങള്‍" കൊണ്ടുദ്ദേശിച്ചത്.

ബാക്കിയുള്ള യൂആര്‍എല്‍ ശൈലികളോ? സേര്‍ച്ച് എഞ്ചിനുകള്‍ക്ക് മനസ്സിലാകല്‍, ആക്സസിബിളിറ്റി എന്നീ കാര്യങ്ങളില്‍ ഇവയെല്ലാം ഒരേപോലെയാണ് (വാസ്തവത്തില്‍ അത്തരം ആവശ്യങ്ങള്‍ക്ക് ആശ്രയിക്കേണ്ടത് hreflang, lang എന്നീ ആട്രിബ്യൂട്ടുകളെയും Content-Language എന്ന ഹെഡ്ഡറിനെയുമാണ്).

ജൂംല പോലുള്ള ഡൈനാമിക് സിഎംഎസ്സുകള്‍ ഉപയോഗിക്കുമ്പോള്‍ വരാവുന്നതാണ് ?lang=en (ക്വറി പരാം) ശൈലി. .en.html എന്നതാകട്ടെ സ്റ്റാറ്റിക് സൈറ്റ് ജനറേറ്ററുകളോ കൈകൊണ്ടെഴുതിയ ഫയലുകളോ ഉപയോഗിക്കുമ്പോള്‍ വരുന്നതും. രണ്ടായാലും സാധാരണ സന്ദര്‍ശകര്‍ക്ക് കുറേക്കൂടി ഇഷ്ടപ്പെടുക മുന്നില്‍ /en/ എന്നു വയ്ക്കുന്നതായിരിക്കും.

ഒന്നെടുക്കാം, മറ്റൊന്നു കാണിക്കാം

പരിഭാഷയ്ക്ക് ഇഷ്ടമുള്ള യൂആര്‍എല്‍ ശൈലി തെരഞ്ഞെടുക്കാന്‍ സിഎംഎസ് അല്ലെങ്കില്‍ സൈറ്റ് ജനറേറ്ററില്‍ സൌകര്യമുണ്ടാവേണ്ടതാണ്. ഇല്ലെങ്കില്‍ എന്തുചെയ്യും? മാത്രമല്ല, പുറമേക്ക് ഒരു രീതി തെരഞ്ഞെടുത്താലും ഉള്ളില്‍ മറ്റൊരു രീതി തന്നെ തുടരണമെന്ന് തോന്നിയാലോ? ഉദാഹരണത്തിന്, /en/ രീതിയാണ് കാണാന്‍ ഭംഗി. എന്നാല്‍ ഒരു സ്റ്റാറ്റിക് അല്ലെങ്കില്‍ ഡയറക്റ്ററി-അധിഷ്ഠിത സൈറ്റില്‍ സോഴ്സ് ഫയലുകള്‍ ഇങ്ങനെ ക്രമീകരിക്കുന്നത് ബുദ്ധിമുട്ടാണ്. ഓരോ ഭാഷയ്ക്കും ഡയറക്റ്ററി ഘടന (ഫോള്‍ഡറുകള്‍) പകര്‍ത്തുകയും ഒത്തുകൊണ്ടുപോവുകയും വേണമല്ലോ (ഉദാ: /en/section/subsection/page, /ml/section/subsection/page, ...). അതേസമയം .en.html എന്ന രീതി തെരഞ്ഞെടുത്താല്‍ ഒരേ പേജിന്റെ പരിഭാഷകളെല്ലാം ഒരേ ഫോള്‍ഡറില്‍ സൂക്ഷിക്കാം. കൈകാര്യം ചെയ്യുന്നത് എളുപ്പമായി. ഉള്ളിലെ ഫയലുകള്‍ ഒരു രീതിയില്‍ സൂക്ഷിക്കാനും യൂആര്‍എല്ലുകള്‍ മറ്റൊരു രീതിയിലാക്കാനും വെബ് സൈര്‍വറുകള്‍ തരുന്ന സൌകര്യം ഇവിടെ ഉപയോഗിക്കാം.

അപ്പാച്ചീ റീറൈറ്റ് റൂള്‍

നിശ്ചിത ക്രമത്തിലുള്ള ഏത് യൂആര്‍എല്ലിനെയും എങ്ങനെ മാറ്റം വരുത്തണമെന്ന് പറയാനുള്ളതാണ് അപ്പാച്ചീ വെബ് സെര്‍വറിലെ RewriteRule എന്ന ഡയറക്റ്റീവ്. ഈ മാറ്റം വരുത്തല്‍ സന്ദര്‍ശകര്‍ക്ക് ബ്രൌസറിന്റെ അഡ്രസ് ബാറില്‍ കാണാവുന്ന രീതിയിലോ കാണാത്ത രീതിയിലോ ആക്കാം.

റീറൈറ്റ് റൂളുകള്‍ ശരിയായി എഴുതുന്നത്, പ്രത്യേകിച്ച് ലൂപ്പുകള്‍ ഒഴിവാക്കുന്നത് എളുപ്പമല്ല എന്നതുകൊണ്ട് നമുക്കാദ്യം റീഡയറക്ഷന്‍ പരീക്ഷിക്കാം. അതായത്, യൂആര്‍എല്‍ മാറുന്നത് സന്ദര്‍ശകര്‍ അറിയുന്നു. ഈ പരീക്ഷണം വിജയിച്ച ശേഷ‍ം അതിനെ ആന്തരികമായ മാറ്റിയെഴുത്താക്കാം.

സൈറ്റിന്റെ ഡോക്യുമെന്റ് റൂട്ടിലെ (പ്രധാന ഫോള്‍ഡര്‍) .htaccess എന്ന ഹിഡണ്‍ ഫയലില്‍ എഴുതാവുന്ന റൈറൈറ്റ് റൂള്‍ ചുവടെ. ഓര്‍ക്കുക, കഴിയുമെങ്കില്‍ റീറൈറ്റ് റൂളുകള്‍ സൈറ്റിന്റെ പ്രധാന കോണ്‍ഫിഗറേഷന്‍ ഫയലില്‍ എഴുതാനാണ് അപ്പാച്ചീ പറയുന്നത്. ലാളിത്യത്തിനുവേണ്ടിയാണ് തത്കാലം എച്ച്ടിആക്സസ് തെരഞ്ഞെടുക്കുന്നത്.

RewriteEngine On
RewriteRule ^([a-z][a-z])/(.+)$ /$2.$1.html [R=307]

റീറൈറ്റ് റൂള്‍ ആദ്യമായി ഉപയോഗിക്കുന്നവര്‍ക്കുവേണ്ടി അരല്പം വിശദീകരണം തരാം. RewriteRule എന്ന കീവേഡിനുശേഷം മൂന്നു ഭാഗങ്ങളാണ് ഇതിലുള്ളത്. ആദ്യത്തേതാണ് മാച്ചിങ്ങിന് ഉപയോഗിക്കുന്ന പാറ്റേണ്‍. ഉപയോക്താക്കള്‍ സന്ദര്‍ശിക്കുന്ന ഓരോ യൂആര്‍എല്ലും അപ്പാച്ചീ ഇതുമായി താരതമ്യം ചെയ്തുനോക്കും. സാമ്യമുണ്ടെങ്കില്‍ രണ്ടാം ഭാഗത്ത് പറഞ്ഞിട്ടുള്ള രീതിയില്‍ മാറ്റിയെഴുതും.

മേല്‍ക്കൊടുത്ത റൂള്‍ പ്രകാരം രണ്ട് ലോവര്‍കെയ്സ് അക്ഷരങ്ങളില്‍ത്തുടങ്ങി ഒരു സ്ലാഷും പിന്നീട് ഒന്നോ അതിലേറെയോ ക്യാരക്റ്ററുകളും ഉള്ള എല്ലാ യൂആര്‍എല്ലുകളും മാച്ചാകും (ഏത് അക്ഷരവും എന്ന് സൂചിപ്പിക്കാനാണ് കുത്ത്; ഒരു തവണയെങ്കിലും എന്ന് സൂചിപ്പിക്കാനാണ് പ്ലസ് ചിഹ്നം). ഇങ്ങനെ സാമ്യം കണ്ട യൂആര്‍എല്ലിനെ /$2.$1.html എന്ന രീതിയിലാക്കി മാറ്റും. പാറ്റേണില്‍ ബ്രാക്കറ്റുകള്‍ക്കിടയില്‍ക്കൊടുത്ത ഭാഗങ്ങള്‍ സൂചിപ്പിക്കാനാണ് ഡോളറും സംഖ്യയും. ഈ ഉദാഹരണത്തില്‍ $1 എന്നാല്‍ ഭാഷയെ സൂചിപ്പിക്കുന്ന രണ്ടക്ഷരവും $2 എന്നാല്‍ അതേത്തുടര്‍ന്നുള്ള (സ്ലാഷ് ഇല്ലാതെ) ഭാഗവുമാണ്. യൂആര്‍എല്‍ തുടക്കം മുതല്‍ വാലറ്റം വരെ താരതമ്യപ്പെടുത്തണമെന്നു വ്യക്തമാക്കാനാണ് പാറ്റേണ്‍ ക്യാരറ്റില്‍ തുടങ്ങി ഡോളറില്‍ അവസാനിപ്പിക്കുന്നത്.

ആദ്യം റീഡയറക്ഷന്‍

റൂളിലെ മൂന്നാം ഭാഗം ([R=307]) ഫ്ലാഗുകള്‍ക്കുവേണ്ടിയുള്ളതാണ്. നിലവില്‍ക്കൊടുത്തിട്ടുള്ളതുപ്രകാരം സംഭവിക്കുക ഓരോ തവണയും ബ്രൌസറില്‍ക്കാണാവുന്ന ഒരു റീഡയറക്ഷന്‍ ആണ്. ഈ രീതിയിലാകുമ്പോഴാണ് റീറൈറ്റ് റൂളിന്റെ പ്രവര്‍ത്തനം പരിശോധിച്ചുറപ്പിക്കാനെളുപ്പം. അതിനുശേഷം റീഡയറക്ഷനെ മാറ്റി റീറൈറ്റാക്കാം.

യൂആര്‍എല്ലുകള്‍ക്ക് എന്ത് രൂപമാറ്റം വരുന്നു എന്ന് നിരീക്ഷിക്കാന്‍ curl കമാന്‍ഡ് ഉപയോഗിച്ചുനോക്കാം. പകരം ബ്രൌസറിലെ ഡെവലപ്പര്‍ ടൂള്‍സ് സൌകര്യം ഉപയോഗിച്ചാലും മതി.

കുറിപ്പ്: എച്ച്ടിആക്സസ് ഫയലില്‍ നേരത്തേ പറഞ്ഞ കോഡ് കൊടുക്കുമ്പോള്‍ ഇന്റേണല്‍ സെര്‍വര്‍ എററാണ് വരുന്നതെങ്കില്‍ അത് റീറൈറ്റ് മൊഡ്യൂള്‍ എനേബിള്‍ ചെയ്യാത്തതുകൊണ്ടാകാം. ഉബുണ്ടുവിലും മറ്റ് ഡെബീയന്‍-അധിഷ്ഠിത ഡിസ്ട്രോകളിലും ഇതിനായി sudo a2enmod rewrite && sudo systemctl restart apache2 എന്ന കമാന്‍ഡാണ് ഉപയോഗിക്കേണ്ടത്.

കേള്‍ കമാന്‍ഡ് ഉപയോഗിച്ചുനോക്കിയാല്‍ ഇപ്പോള്‍ ഇങ്ങനെ കിട്ടണം:

$ curl -I localhost/en/section/subsection/page
HTTP/1.1 307 Temporary Redirect
...
Server: Apache/2.4.52 (Ubuntu)
Location: http://localhost/section/subsection/page.en.html
...

ഇനി ഭാഷ മാറ്റിപ്പരീക്ഷിക്കാം:

$ curl -I localhost/ml/section/subsection/page
HTTP/1.1 307 Temporary Redirect
...
Server: Apache/2.4.52 (Ubuntu)
Location: http://localhost/section/subsection/page.ml.html
...

നാം പരിഭാഷപ്പെടുത്തിയിട്ടില്ലാത്ത--അതായത്, .html ഫയല്‍ ഇല്ലാത്ത--പേജുകള്‍ പരീക്ഷിച്ചാലും നിലവില്‍ റീഡയറക്ഷന്‍ സംഭവിക്കും. എന്നാല്‍ റീഡയറക്ഷനു ശേഷം പ്രതീക്ഷിക്കുന്ന പോലെ ഒരു 404 (നോട്ട് ഫൌണ്ട്) എറര്‍ തന്നെ കിട്ടും. റീഡയറക്ഷനു പകരം ആന്തരികമായി റീറൈറ്റ് സംഭവിക്കുന്നതുപോലെ റൂള്‍ മാറ്റിയെഴുതിയാല്‍ ഇല്ലാത്ത പേജുകള്‍ക്ക് ആദ്യം തന്നെ 404 കിട്ടിക്കോളും.

ഉള്ളിലൊതുക്കാം

ഇനി നമുക്ക് റീഡയറക്ഷനും പകരം സന്ദര്‍ശകരുടെ കണ്ണില്‍പ്പെടാത്ത ഒരു റീറൈറ്റ് ആക്കി ഇതിനെ മാറ്റാം. ഫയലുകളെല്ലാം വേണ്ടയിടങ്ങളിലുണ്ടെന്ന് ഉറപ്പാക്കുകയാണ് ആദ്യം ചെയ്യേണ്ടത്:

~/www$ tree section
section
└── subsection
    ├── page.en.html
    └── page.ml.html

(ഹോമിനകത്തെ www/ എന്ന ഫോള്‍ഡറാണ് ലേഖകന്റെ ഡോക്യുമെന്റ് റൂട്ട്. ഫയലുകള്‍ പരിശോധിക്കാന്‍ tree എന്ന കമാന്‍ഡിനു പകരം പതിവായി ഉപയോഗിക്കുന്ന ഫയല്‍ ബ്രൌസര്‍ ആയാലും മതി.)

ഇനി എച്ച്ടിആക്സസ് ഫയല്‍ എങ്ങനെയാക്കിമാറ്റണം?

RewriteEngine On
RewriteRule ^([a-z][a-z])/(.+)$ /$2.$1.html

അതെ, ഫ്ലാഗുകള്‍ ഒഴിവാക്കുക എന്ന ഒരൊറ്റ മാറ്റമേ വരുത്തിയിട്ടുള്ളൂ. ഇപ്പോള്‍ റീഡയറക്ഷന്‍ ഇല്ല എന്നുറപ്പാക്കാം:

$ curl -I localhost/en/section/subsection/page
HTTP/1.1 200 OK
...

$ curl -I localhost/ml/section/subsection/page
HTTP/1.1 200 OK
...

ഫയല്‍ ഇല്ലാത്ത ഭാഷയ്ക്ക് 404 കിട്ടുന്നില്ലേ എന്നു നോക്കാം:

$ curl -I localhost/xx/section/subsection/page
HTTP/1.1 404 Not Found
...

അവസാനമായി ഉള്ളടക്കം തന്നെ പരിശോധിക്കാം:

$ curl localhost/en/section/subsection/page
<h1>Welcome!</h1>

$ curl localhost/ml/section/subsection/page
<meta charset="utf-8">
<h1>സ്വാഗതം!</h1>

കൊള്ളാം,. ഇനി ബ്രൌസറില്‍നിന്ന്. അഡ്രസ് ബാറില്‍ പുതിയ ശൈലിയിലുള്ള യൂആര്‍എല്ലുകള്‍ നിലനിര്‍ത്തിക്കൊണ്ടുതന്നെ page.en.html, page.ml.html എന്നീ ഫയലുകള്‍ അയച്ചുതരികയാണ് സെര്‍വര്‍ എന്നുകാണാം.

ഇംഗ്ലീഷ്, മലയാളം പേജുകള്‍ ഫയര്‍ഫോക്സില്‍
റീറൈറ്റ് റൂള്‍ നല്‍കിയ ശേഷം ഇംഗ്ലീഷ്, മലയാളം പേജുകള്‍ ഫയര്‍ഫോക്സില്‍ സന്ദര്‍ശിച്ചപ്പോള്‍

പുതിയ ശൈലി നിര്‍ബന്ധമാക്കല്‍

അങ്ങനെ /en/ ശൈലിയിലുള്ള യൂആര്‍എല്ലുകള്‍ പ്രവര്‍ത്തിച്ചുതുടങ്ങിയിരിക്കുന്നു. എന്നാല്‍ ജോലി തീര്‍ന്നിട്ടില്ല. .en.html ശൈലിയിലുള്ള യൂആര്‍എല്‍ ആരെങ്കിലും കൊടുത്തുനോക്കുകയാണെങ്കില്‍ (പഴയ വല്ല ബുക്ക്‌മാര്‍ക്കോ മറ്റു സൈറ്റുകളില്‍നിന്നുള്ള ലിങ്കുകളോ ഒക്കെയാകാം) അവ ഇപ്പോഴും പഴയപടിതന്നെ പ്രവര്‍ത്തിക്കും. അവര്‍ക്കുമുന്നില്‍ (സേര്‍ച്ച് എഞ്ചിനുകള്‍ക്കുമുന്നിലും) പുതിയ തരം യൂആര്‍എല്‍ അവതരിപ്പിക്കേണ്ടേ?

ആദ്യം തോന്നുക എച്ച്ടിആക്സസ് ഫയല്‍ ഇങ്ങനെ മാറ്റാനായിരിക്കും:

# WRONG! Read below.
RewriteRule ^(.*)\.([a-z][a-z])\.html$ /$2/$1
RewriteRule ^([a-z][a-z])/(.+)$ /$2.$1.html

(പാറ്റേണില്‍ ഡോട്ടുകൊണ്ടുദ്ദേശിക്കുന്നത് ഏതെങ്കിലുമൊരു ക്യാരക്റ്റര്‍ എന്നാണ്; ശരിക്കും ഡോട്ടു തന്നെ മാച്ചാവണമെങ്കിലാണ് അതിനുമുന്നില്‍ ഒരു ബാക്ക്‌സ്ലാഷ് കൊടുക്കുന്നത്.)

ഈ എച്ച്ടിആക്സസില്‍ കുഴപ്പമുണ്ട്. ഇതൊരു ലൂപ്പിന് കാരണമാകുമെന്നതാണ് പ്രധാനപ്രശ്നം. ഉപയോക്താവ് .en.html ശൈലിയിലുള്ള ഒരു യൂആര്‍എല്‍ നല്‍കുമ്പോള്‍ അപ്പാച്ചീ അത് /en/ ശൈലിയിലേക്ക് മാറ്റുന്നു. രണ്ടാമത്തെ റൂളുമായി സാമ്യമുള്ളതിനാല്‍ അത് ആദ്യത്തെ ശൈലിയിലേക്ക് വീണ്ടും മാറ്റിയെഴുതപ്പെടുന്നു. ഇതങ്ങനെ തുടര്‍ന്നുകൊണ്ടേയിരിക്കും. ഭാഗ്യവശാല്‍ അപ്പാച്ചീ ഈ പ്രശ്നം സ്വയം കണ്ടെത്തുകയും ഇന്റേണല്‍ സെര്‍വര്‍ എറര്‍ പുറപ്പെടുവിക്കുകയും ചെയ്യുന്നുണ്ട്. (റീറൈറ്റ് റൂള്‍ ആദ്യമേ പരിചയമുള്ളവര്‍ L എന്ന ഫ്ലാഗിനെക്കുറിച്ച് ഇതിനകം ചിന്തിച്ചിട്ടുണ്ടാകും. അതുകൊണ്ട് കാര്യമില്ല. എന്നാല്‍ END എന്ന ഫ്ലാഗ് ഉപകരിക്കും.)

$ curl -I localhost/section/subsection/page.en.html
HTTP/1.1 500 Internal Server Error

ഇവിടെ നാം കൊടുത്തിട്ടുള്ളത് ഒരു ഇന്റേണല്‍ റീറൈറ്റാണ്, റീഡയറക്റ്റല്ല എന്നതാണ് രണ്ടാമത്തെ പ്രശ്നം. /en/ എന്നത് .en.html ആയി മാറുന്ന മാറ്റിയെഴുതല്‍ അദൃശ്യമായിരിക്കണമെങ്കിലും തിരിച്ചുള്ളത് സന്ദര്‍ശകര്‍ കാണുന്നപോലെതന്നെ സംഭവിക്കണം. എങ്കിലല്ലേ /en/ എന്ന ശൈലിയാണ് നാം തെരഞ്ഞെടുത്തിട്ടുള്ളത് എന്ന് വ്യക്തമാക്കാന്‍ പറ്റൂ. ഈ ആവശ്യത്തിനായി റീറൈറ്റിനുപകരം റീഡയറക്റ്റ് ക്രമീകരിക്കുന്നതോടെ ആദ്യത്തെ പ്രശ്നം (ലൂപ്പ്) താനേ ഒഴിവായിക്കിട്ടുമെന്നതാണ് രസകരം. എന്തായാലും പുതിയ റൂള്‍ ഇതാ:

# Works fine
RewriteRule ^(.*)\.([a-z][a-z])\.html$ /$2/$1 [R=308]
RewriteRule ^([a-z][a-z])/(.+)$ /$2.$1.html

ഇപ്പോള്‍ കേളില്‍ കിട്ടുക:

$ curl -I localhost/section/subsection/page.en.html
HTTP/1.1 308 Permanent Redirect
...
Location: http://localhost/en/section/subsection/page
...

‌ബ്രൌസറില്‍ സംഭവിക്കുന്നത്:

  1. /en/ ശൈലിയിലുള്ള ഒരു യൂആര്‍എല്‍ .en.html ഫയല്‍ പ്രദര്‍ശിപ്പിക്കും. എന്നാല്‍ ഉപയോക്താവോ ബ്രൌസറോ ഈ മാറ്റം അറിയില്ല.
  2. .en.html ശൈലിയിലുള്ള ഒരു യൂആര്‍എല്‍ പ്രത്യക്ഷത്തില്‍ത്തന്നെ /en/ ശൈലിയിലേക്ക് റീഡയറക്റ്റ് ആകും. ശേഷം മേല്‍ക്കൊടുത്തത് സംഭവിക്കും.

കുറിപ്പ്

  • ശ്രദ്ധിക്കുക: ശരിയായി ഉപയോഗിച്ചില്ലെങ്കില്‍ റീറൈറ്റ് റൂളുകള്‍ ഡയറക്റ്ററി ട്രവേഴ്സല്‍ ആക്രമണത്തിനുള്ള സാദ്ധ്യത വര്‍ദ്ധിപ്പിക്കാം (റീറൈറ്റ് റൂളുകളില്ലാതെയും ഈ ആക്രമണമുണ്ടാകാം; ഉണ്ടെങ്കില്‍ സാദ്ധ്യത കൂടാമെന്നുമാത്രം). അപ്പാച്ചീ ഇതു തടയുന്നതായാണ് അനുഭവം; എങ്കിലും സ്വയം പരീക്ഷിച്ച് ഉറപ്പാക്കുക.
  • എച്ച്ടിആക്സസില്‍ മാത്രമല്ല റീറൈറ്റ് റൂളുകള്‍ കൊടുക്കാനാവുക. സൈറ്റിന്റെ പ്രധാന കോണ്‍ഫിഗഷേന്‍ ഫയലില്‍ പലയിടത്തും ഇത് കൊടുക്കാം. എന്നാല്‍ അതിനനുസരിച്ച് പാറ്റേണുകള്‍ക്ക് മാറ്റമുണ്ടാകാം. ഉദാഹരണത്തിന്, സൈറ്റിന് മൊത്തത്തിലുള്ള പാറ്റേണുകള്‍ സ്ലാഷ് വച്ചുതുടങ്ങാം. എന്നാല്‍ എച്ച്ടിആക്സസിലെ പാറ്റേണുകള്‍ ഡയറക്റ്ററിക്ക് ആപേക്ഷികമായിരിക്കും, സ്ലാഷ് വച്ച് തുടങ്ങാനാവില്ല.
  • R എന്നതിനു പുറമെയുള്ള ഫ്ലാഗുകളടക്കം റീറൈറ്റ് റൂളുമായി ബന്ധപ്പെട്ട ഒരുപാട് വിശദാംശങ്ങള്‍ അപ്പാച്ചീയുടെ ഔദ്യോഗിക ഡോക്യുമെന്റേഷനിലുണ്ട്. തീര്‍ച്ചയായും വായിക്കുക.
  • റീറൈറ്റ് റൂളിലെ പാറ്റേണുകള്‍ എഴുതാനുപയോഗിക്കുന്നത് Regex അഥവാ റെഗുലര്‍ എക്സ്പ്രഷന്‍ ആണ്. ഇതിന് മറ്റൊരുപാടിടങ്ങളില്‍ സാദ്ധ്യതകളുണ്ട്.
  • ലേഖനത്തില്‍ പറഞ്ഞിട്ടുള്ള "ഭംഗിയുള്ള" തരം യൂആര്‍എല്ലുകളല്ല ഈ സൈറ്റിലുണ്ടാവുക. ഒന്ന്, അത് വ്യക്തിപരമായ ഇഷ്ടാനിഷ്ടങ്ങളുടെ ഭാഗമാണ്. രണ്ട്, ഈ സൈറ്റില്‍ എല്ലാ പേജിനും പരിഭാഷകളുണ്ടാവണമെന്നില്ല. അതുകൊണ്ടുതന്നെ എല്ലാ യൂആര്‍എല്ലിന്റെ തുടക്കത്തിലും ഭാഷ സൂചിപ്പിക്കുന്ന പ്രിഫിക്സ് വയ്ക്കുന്നതില്‍ അര്‍ത്ഥമില്ല.

Click here to read more like this. Click here to send a comment or query.