URL Unaofaa kwa Mashini ya Kutafuta (SEF URLs)
From Joomla! Documentation
URL Unaofaa kwa Mashini ya Kutafuta (SEF), kuweza kusomeka na mtu yoyote au clean URLs ni ma URL yote ambayo yanaweza kusomeka na mtu yoyote na mashini za kutafuta, kwa sababu yanaeleza njia za kila ukurasa halisi kwa kila namna. Tangu toleo 1.5, Joomla! ina uwezo wa kutengeza na kuchambua URL na fomati zozote, hatakama ni SEF URL. Hii haita tegemea na seva ambayo unarekebisha URL, kwa hivyo itafanya hatakama Joomla! inaendesha kwa seva nyingine zaidi ya Apache ilio na moduli wa mod_rewrite. SEF URL zitafuata patani fulani za kudumu, lakini mtumiaji anaweza kufafanua maandishi mafupi ya maelezo (alias) kwa kila kitengwa cha URL.
Ndani, ni sehemu ya kawaida ya SEF URL (ni sehemu baada ya jina la kikoa) linaitwa njia (route). Usindikaji na utengezaji wa SEF URL huu unajulika kama kuruta (routing), na kodi inayohusika inaitwa ruta (router).
Mfano mzuri wa kuruta ni URL wa makala "Karibu kwa Joomla!" katika data za sampuli
- Bila ya kuwasha SEF URL, URL ni
http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50
- Ukiwasha SEF URL na ukizima mod_rewrite, ni
http://www.example.com/index.php/the-news/1-latest-news/1-welcome-to-joomla
- Ukiwasha SEF URL pamoja na mod_rewrite, ni
http://www.example.com/the-news/1-latest-news/1-welcome-to-joomla
URL unaofaa kwa mashini ya kutafuta (SEF URL) unaweza kuamilishwa kwa kuwashwa chaguo la URL Unaofaa kwa Mashini ya Kutafuta (SEF URL) katika Usanidi wa kidunia. Chaguo hili la difoti ni tangu Joomla! 1.6. Angalia Kuwezesha URL Unaofaa kwa Mashini ya Kutafuta (SEF URL) kwa maelezo zaidi.
- Search Engine Friendly URLs: This is the main switch to enable SEF URLs and creates the URLs like in the second example above.
- Use URL Rewriting: When enabled, the server tries to use mod_rewrite and shorten the URL further by removing the /index.php/ from the URL.
- Add Suffix to URL: When enabled, the URLs get a suffix similar to a file extension (depending on the output). By default this is .html, but for a JSON output this can also be .json.
- Unicode Aliases: Joomla by default tries to convert any alias to a plain ASCII representation for the URL, converting for example ö to oe. Enabling this option keeps the original unicode string. This might be preferable for your local users, but create a barrier for international users who don't know how to generate those characters.
The system behind these SEF URLs by default is very lenient and allows a lot of different URLs to reach the same page. While this is user-friendly, Google doesn't really like that. So starting with Joomla 5.1 there are additional switches in the System - SEF plugin which enforce a stricter behavior:
- Forcibly remove index.php in URL with redirects: If the site is called with an index.php in the URL, Joomla will now redirect to the page without an index.php with a 301 redirect. From Joomla 6.0 onwards this option will be removed again and the behavior enabled as standard.
- Trailing slash for URLs: This option allows to set and enforce if a URL should have a trailing slash or not. This is also enforce with a 301 redirect if the current URL does not confirm the selected setting. By default the site accepts both. This option is only available when Add Suffix to URL is disabled. Starting with Joomla 6.0 the default behavior will be to enforce without a trailing slash.
- Enforce a suffix by redirect: When this setting and Add Suffix to URL is enabled, URLs without a suffix are redirected to their "correct" URL with a suffix with a 301 redirect. Starting with Joomla 6.0 this option will be the standard behavior and the option will then be removed again.
- Disallow non-SEF URLs: Enabling this option means that Joomla will try to build the correct URL from what it understood of the current URL and if the current URL and the one Joomla built itself are not identical, Joomla will redirect to the one it built itself. This means that URLs like /component/content/article/42 or index.php?option=com_content&view=article&id=42 would be correctly redirected to /welcome/to/joomla. This option can create issues in some site setups, so test your site thoroughly after enabling this.
For more information please see Enabling Search Engine Friendly (SEF) URLs.
FAQs
Nambari katika URL zinamaanisha nini?
Ni kulinganisha URL wa zamani na URL mpya ndio utaona nambari za zamani za URL,
http://www.example.com/index.php?option=com_content&view=article&id=1:welcome-to-joomla&catid=1:latest-news&Itemid=50
Na pia kwa URL mpya ni:
http://www.example.com/the-news/1-latest-news/1-welcome-to-joomla
Nambari hizi ni za maparamita yanayohitajika kwa Joomla! kuweza kupata URL wa ndani na kuonyesha kurasa unazotaka kuona. (Kwa kesi hii, nambari za kwanza ni kitamulisho cha jamii, nambari za pili ni kitambulisho cha makala.)
Hakuna index.php
kwa URL tena. Unaweza kufuta faili hii sasa?
Sio! URL pengine hauna index.php
tena, lakini ndani ya mod_rewrite utakuelekeza kwa njia pekee kabla ya ku kuonyesha wewe.
Ni nini thamani ya Jina bandia? Na ina tengezwa vipi?
Jina bandia limeorodheshwa chini ya eneo la kichwa cha Makala, Majamii, Vitu vya Menyu na Sehemu. Joomla! itakutengezea moja kwa moja majina ya bandia yako. Matengezaji ya bandia yanaanza na kitchwa. Maherufi makubwa yote yatabadilishwa kuwa maherufi madogo. Nafasi na herufi maalum haziruhusiwi katika URL; zitabadilishwa kwa madashi
Nataka kutaja thamani yangu kwa jina bandia.
Ikiwa hupendi jina bandia lililopeanwa na Joomla!, unaweza kuweka thamani unazopendelea katika eneo hili. Wengi wanaamini kuwa kutumia maneno muhimu mazuri yatasaidia uboreshaji kwa mashini ya kutafuta (search engine optimisation, SEO). Unaweza kufanya hivi kwa kuongeza haya maneno muhimu katika kichwa chako na kuruhusu Joomla! kutengeza jina bandia, ama kwa kutengeza jina bandia wewe mwenyewe.
Ni jinsi gani jina bandia linatumika katika URL?
Kwa kitu cha menyu, Joomla! inatumia jina bandia kama plagi. Kudhani kuwa unatima machaguo mawili ya kwanza kwa SEF URL na untatengeza kitu cha menyu kinaitwa Mazao. URL wako utakua ni mfano.com/mazao.
Joomla! pia inatumia mathamani ya msingi ya funguo za data ndani ya URL kwa kusaidia ruta kurambaza katika ukurasa wa sawa. Kuendela na mfano wa yaliopita, ikiwa kitu chako cha menyu cha Mazao kilikuwa kwa makala/blogi ya jamii, kiungo kwa Kichwa cha Makala na/au kiungo cha Soma Zaidi chako kitakuwa na sehemu tatu.
- URL wa kitu cha menyu - mfano.com/mazao;
- Na funguo ya msingi kwa Jamii na Jina Bandia la Jamii - 32-matunda;
- Na funguo ya msingi kwa Makala na Jina Bandia la Makala - 1-tufaha;
URL kamili ni: http://mfano.com/mazao/32-tunda/1-tufaha
Ni vipi naweza kuwachana na nambari ndani ya SEF URL?
Nambari ndani ya SEF URL zinahitajika na ruta ya Joomla! kwa kujua ni vipi kuelekeza trafiki ya wavuti. Baadha ya mawazo ya ruta ni utulivu, maplugin rahis ya mkono wa tatu yanaweza kuendelezwa kwa kuongeza uwezo kwa kuruhusi machaguo zaidi. Wakati huo, kuna uwezekano nambari kutolewa kutoka kwa URL.
Mafomati ya njia na ufudi wa kuruta
Sehemu hii inaeleza utaratibu wa kuruta na kiini cha Joomla! (umejengwa ndani). Ukiruta viendelezo, unaweza kubadilisha namna ya tengeza manjia katika mfumo wako.
Fomati za njia
Kueleza undani wa utaratibu wa kuruta wa Joomla!, nilazima kwanza tuelewe ya ndani na ni vipi tunaitisha njia. Kudhani kuwa Joomla! imesakinishwa katika http://mfano.com/wavuti/kwanza/
. Njia ya usakinishaji ya kawaida inaitwa URL wa kimsingi. Mfano unaowezekana kwa URL ni http://mfano.com/wavuti/kwanza/mazao/32-tuna/1-tufaha
. Sehemu ya kwanza ya URL huu ni URL wa kimsingi, na isipokuwa Joomla! haku ruta komponenti yoyote inaweza kutengeza URL na sehemu ya kwanza tofauti. Sehemu ya pili, mazao/32-tuna/1-tufaha
, ni njia yenye vipande vitatu.
Kipande cha kwanza cha njia, ya ma URL ya kawaida, ni jina bandia la kitu cha menyu. Inasema kuwa SEF URL utarutwa kupitia hiki kitu cha menyu. Vipande vyote vinaamuwa na ruta ya komponenti ambayo inapeana aina ya kitu cha menyu. Kwa mfano, aina ya kitu cha menyu Jamii - Blogi inapeanwa na komponenti ya Yaliomo, na kwa hivyo ruta ya komponenti hii ina mamlaka kwa kutengeza na kupambua vipande vilivyobaki.
Pia inawezekana (kwa viendelezo) kuuliza mfumo kwa kutengeza njia bila ya kuleta kitu cha menyu kwa kupitia njia. Kwa kesi hiyo, kawaida mfumo utaamua kutengeza njia maalum ambayo ina neno komponenti
kama kitengwa cha kwanza. njia hizi zinatengezwa kwa kutumia fomati ya kudumu: jina la komponenti (bila com_
) linatumika kama kitengwa cha pili na maparamita yoyote kama vitengwa vingine.
Mipaka
Ni muhimu kukumbuka kuwa kutengeza kitu cha menyu ni njia pekee wa mtumiaji wa Joomla! kufafanua njia ambayo inafika kwa komponenti maalum. Kwa vyovyote, inavyowezekana kutengeza njia ambayo haionyeshi wavuti (ndani ya menu). Mbinu na kila mara ni kutengeza kitu cha menyu ndani ya menyu hakionekani popote. Kwa kawaida, menyu hii inaitwa menyu ya kujificha.
Aya ya yaliopita inadokeza kuwa haitawezekana kuweka komponenti moja kuwa na mamlaka ya shuguli ya njia zote. Kwa mfano, haitawezekana kubayana kuwa URL http://mfano.com/jinabandia
utaonyesha kitu cha Yaliomo na jina bandia jinabandia
, ambapo jinabandia
linaweza kuwa neno lolote. Ikiwa unatakiwa kufanya hivi kwa idadi chache za makala, unaweza kutengeza kwa mkono vitu vya menyu kwa hivi. Vinginevyo, unatakiwa uwe na kiendelezo kinachopitia.
Njia za kiufundi sio urahisi wa watumiaji kuwa wakati mwengine wanaweza kuhitaji. Kwa upande mwegine, kuna faida moja kubwa: itapunguza utandu wa nafasi za njia (njia ambazo ungeelekeza kwa kurasa mbili tofauti). Kwa njia ya kitengwa cha kwanza, kila mara kwa kitu cha menyu cha jina bandia, mfumo utajua mara moja kuwa ni makomponenti gani lazima ya changanuliwe kwa kuruta.
Maelezo ya utekelezaji
Kushugulika na Njia
Sehemu hii inaeleza utekelezaji wa kupanga njia. Ikiwa wewe ni muendelezaji wa komponenti, angalia Kusaidizi SEF URL katika komponenti yako.
Njia za Joomla zinaongezwa na zinatatuliwa kwa darasa la JRouter. Darasa hili la komponenti linaonekana katika mzizi wa komponenti inayo fanya kazi hivi sasa (specified in the option
parameter in the query string) na pamoja na router.php
Saraka ya faili ya mzizi wa komponenti. Na itaita kazi moja kutoka kwa mbili, kazi moji ni ya kutengeza URL wa SEF na nyengine ni kutafsiri URL wa SEF.
Darasa la JRouter limeandikwa na Joomla CMS katika /includes/router.php
. Katika faili hii ni kutengeza na kuchanganua kazi zilizoandikwa kwa makini, na kupambua ma URL ya Joomla ya CMS.
Faili ya router.php
katika kila komponenti (kwa mfano, /components/com_content/router.php
) lazima ziwe na kazi mbili zifwatazo:
- ContentBuildRoute – hii inatengeza SEF URL
- Maparamita
- $query – hii ni array (na jina) yenye mageuzo ya querystring
- Marudisho: array ya kitengwa ambacho kila kitengwa kimetengwa kwa herufi '/' ambazo baadaye zitaingilia pamoja na kutengeza URL halisi (vitu katika array si lazima viwe na herufi '/')
- Maparamita
- ContentParseRoute – hii itatafsiri SEF URL
- Maparamita
- $segments - Hii ni array ambayo iwe na kitengwa cha URL ulio ombwa.
- Marudisho: jina => array ya thamani ya mageuzo ya querystring ambapo kiungo kinaelekeza
- Maparamita
Plugin ya SEF
Plugin ya Joomla ya Mfumo wa SEF unarithi JPlugin
na unaelekeza kazi ya onAfterRender()
. Katika kazi hii, mwili wa jibu, ambao utatumwa katika kisakuzi, utakachotowa kwa kutumia JResponse::getBody()
. Tena mwili wa jibu utatafutwa kwa viungo vyenye /index.php...
, na vitabadilishwa na URL ulio sahihi wa SEF kwa kuitwa JRoute::_(url)
.
JRoute inajenga SEF URL kwa kupeana amri kwa jambo la JRouter
na kuomba ijenge kiungo cha sawa cha URL.
Kushugulisha SEF URL
Kwa difoti, SEF URL zinazoshugulika na kitu cha JRouterSite
(kutoka kwa /includes/router.php
) na inaita kuito na mwito kwa JApplication::route()
ndani ya index.php. Mwito huu unafanya kwa mageuko ya $app
mifano ambayo ni ya ukweli ya JSite
(kutoka /includes/application.php
).
JApplication::route()
ina tokeo lisiloharibu katika array ya $_GET
. Inamaanisha kuwa JApplication::route()
itaweka mageuko ndani ya $_GET
kwa kuita JRequest::set()
na kuinandika bendera na kuiweka kiuwongo. Kwa hivyo, ikiwa mabadiliko ya jina yataregeshwa kutoka kwa JRouter::route()
ambayo tayari yako ndani ya $_GET
, haitaweka thamani hii kwa $_GET
. Hii itaruhusu kwa njia za kidesturi.
Njia za kidesturi
Joomla itakuruhusu kutengeza mwenyewe njia zako za kiufundi. Kwa kutengeza kiufundi huu, nilazima uwe na plugin ambayo inaandika kazi ya JPlugin::onAfterInitialise()
. Tena kazi hii itapambua URL na itatengeza mabadiliko yanayotakiwa katika $_GET
kabla ya njia za kawaida za Joomla kufanyika.
Kwa mfano, angalia Kutengeza plugin ya mfumo kwa kuongeza JRouter.