Drupal 8-ում URL-ների մաքրության խնդիրների լուծում
Հիմունքներ
Drupal 8-ում մաքուր URL-ները ակտիվացված են լռելյայն և չեն կարող անջատվել։ Սակայն mod_rewrite մոդուլը պետք է ակտիվացված լինի ձեր վեբ սերվերի վրա։
Ստուգեք ձեր դիտարկչի հասցեի գիծը։ Ձեր կայքի URL-ները չպետք է պարունակեն ?q= հատվածը։
Օրինակ՝ ճիշտ «մաքուր URL»՝
http://www.example.com/node/83
Օրինակ՝ «մաքուր URL», որը չի աշխատում
http://www.example.com/?q=node/83
Կան լրացուցիչ հրահանգներ մաքուր URL-ների կարգավորման համար տարբեր համակարգերի, ինչպիսիք են Apache, Wamp, XAMPP և IIS։
Սերվերի կարգավորում մաքուր URL-ների համար
Կարդացեք ավելին վեբ սերվերի պահանջների մասին
Մաքուր URL-ների կարգավորում նվիրված սերվերի համար httpd.conf ֆայլի միջոցով
Մաքուր URL-ները ակտիվացնելու քայլերն են՝
1. Միացրեք mod_rewrite Apache-ում։ Կարող եք խորհրդակցել ձեր հոստինգ պրովայդերի հետ կամ կարդալ Apache mod_rewrite-ի փաստաթուղթը՝ ավելին իմանալու համար։ Վստահ եղեք, որ mod_rewrite-ը ակտիվացված է ձեր Apache-ի տեղադրման համար։
mod_rewrite-ի առկայությունը ստուգելու համար կարող եք հրամանի տողում մուտքագրել՝
apache2ctl -M
Կախված համակարգից, հրամանը կարող է լինել նաև՝
apachectl -M
կամ
httpd -M
2. Վերադառնալու ցուցակում ստուգեք, որ rewrite_module-ը ցուցակում է։
Եթե mod_rewrite մոդուլը բացակայում է, անհրաժեշտ կլինի այն կառուցել կամ դարձնել մատչելի որպես լիցքավորվող մոդուլ։ Ընդհանուր առմամբ, Apache-ի կոնֆիգուրացիոն ֆայլում ավելացրեք հետևյալ տողերը՝
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
Ապահովվեք, որ AddModule mod_rewrite.c գիծը բացասական նշան չունի։ Կամ փորձեք հետևյալ հրամանը՝ առանց ֆայլեր խմբագրելու՝
a2enmod rewrite
Կարևոր է նկատել, որ այս մոտեցումները կարող են չաշխատել բոլոր օպերացիոն համակարգերի և Apache-ի տարբերակների համադրություններում։ Խորհուրդ է տրվում օգտվել Apache-ի պաշտոնական փաստաթղթից ճիշտ սինթաքսի համար։
Հիշեք վերագործարկել Apache-ը՝ նոր կոնֆիգուրացիան գործողության մեջ դնելու համար։
3. Հաջորդ քայլն է գտնել ձեր կայքի համապատասխան Apache կոնֆիգուրացիոն ֆայլը՝ httpd.conf, vhost.conf կամ apache2.conf։ Սովորաբար դրանք գտնվում են /etc/httpd/conf, /etc/apache2 կամ դրանց ենթաթղթապանակներում։ Կարող եք օգտվել նաև՝
find /etc -name httpd* or find /etc -name apache2*
ֆայլը որոնելու համար։
Եթե չունեք գրելու իրավունք այս ֆայլերում և մաքուր URL-ները չեն աշխատում, պետք է դիմեք ձեր համակարգի ադմինիստրատորին կամ հոստինգ պրովայդերին։ Սակայն դուք կարող եք ընթերցել այս կոնֆիգուրացիոն ֆայլերը որոշակի խնդիրներ պարզելու համար։
4. Հաջորդ քայլն է պատճենել կամ ընդգրկել Drupal-ի կարգավորումները Apache-ի կոնֆիգուրացիոն ֆայլում։ Հիմնական կանոնները և օրինակները կարող եք գտնել այստեղ։ Տեսեք Drupal-ի .htaccess ֆայլը հետևյալ օրինակներով.
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L]
Կամ օրինակ Debian 8 + Apache2 + ISPConfig համակարգում՝ բոլոր կայքերի համաժամանակյա սպասարկման համար.
<Directory /var/www/clients/*/*/web/> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
Համոզվեք, որ դիտարկում եք ձեր Drupal-ի հիմնական տարբերակի .htaccess ֆայլը (օրինակ՝ 8.x)։
Նշում. Եթե չեք ցանկանում վերագրագրի կանոնները գրել Apache-ի կոնֆիգուրացիոն ֆայլում, կարող եք օգտագործել Drupal-ի .htaccess ֆայլը (ինչպես վիրտուալ հոստինգի դեպքում)։ Պետք է ապահովեք, որ Apache-ում AllowOverride կարգավորումը անջատված չէ, օրինակ՝
AllowOverride All AccessFileName .htaccess
Կարդացեք Apache .htaccess-ի մանրամասները ավելի մանրամասն հասկանալու համար։ Կարելի է նաև դիտել Apache 2-ի AllowOverride կարգավորումները։
Նշում MultiViews-ի մասին. Apache-ն ունի MultiViews ֆունկցիա, որը թույլ է տալիս ստանալ էջեր առանց ֆայլի ընդլայնման, օրինակ՝ valuation.txt ֆայլին հասանելի է օրինակ.com/evaluation URL-ով։ Այն կարող է հարմար լինել, բայց երբ մաքուր URL-ները Drupal-ում ակտիվացված են, կարող է խնդիրներ առաջացնել։ Եթե չգիտեք ինչ եք անում, խորհուրդ չի տրվում օգտագործել MultiViews-ը Drupal մաքուր URL-ների հետ։ Չնայած, ըստ լռելյայնի, MultiViews չի ակտիվացվում Apache-ի տեղադրման մեջ, այնպես որ մեծ հավանականությամբ այս խնդիրն ձեզ չի վերաբերի։ Կարդացեք Apache-ի MultiViews-ի մասին՝ ավելին իմանալու համար։
Մաքուր URL-ների կարգավորում ընդհանուր սերվերի վրա .htaccess ֆայլով
Drupal-ի ստանդարտ տեղադրումը պարունակում է .htaccess ֆայլի օրինակ, որը պետք է բավարար լինի մաքուր URL-ների համար։ Այս ֆայլի անունը սկսվում է կետով, և հեշտ է բաց թողնել այն։ Ուստի նախքան մաքուր URL-ները միացնելը, համոզվեք, որ այս ֆայլը առկա է ձեր Drupal-ի տեղադրման արմատում։
Ստուգելու համար տերմինալում օգտագործեք ls -a
, որը ցուցադրում է նաև թաքնված ֆայլերը։
Եթե այս ֆայլը կա, բայց մաքուր URL-ները չեն աշխատում, կարող եք փորձել ստորև նշված լուծումները։ Եթե խնդիրները չեն լուծվում, դիմեք ձեր հոստինգ պրովայդերին։
Խնդիրների լուծում
Ստուգեք, թե .htaccess ֆայլը օգտագործվում է արդյոք
Apache-ին պետք է հատուկ կարգավորվի, որպեսզի հարգել կայքի .htaccess ֆայլի հրահանգները։ Դա լռելյայն անջատված է, բայց շատ հոստեր այն միացնում են։ Այդ նպատակի համար վերևում նշված է AllowOverride All կարգավորումը, որը հնարավորություն է տալիս .htaccess-ին գործել։
Ստուգելու համար՝ կարճ ժամանակով ավելացրեք սխալ տեքստ .htaccess ֆայլում, որպեսզի կոտրեք այն։ Եթե ձեր կայքը դառնա «500 սերվերի սխալ», ապա .htaccess ֆայլը աշխատում է։ Հետո անմիջապես հեռացրեք սխալ տեքստը։
Եթե կայքը չի կոտրվում, նշանակում է .htaccess-ը անտեսվում է և մաքուր URL-ները չեն աշխատի, մինչև ձեր հոստերը ակտիվացնի դա կամ դուք կարգավորեք այն httpd.conf-ում՝ վերևում նկարագրված ձևով։ Որոշ հոստեր դա թույլ են տալիս անել իրենց կառավարման վահանակից։
RewriteBase-ի կարգավորում
RewriteBase կարգավորումը կարևոր է՝ մաքուր URL-ները աշխատեցնելու համար։ Այն կարող է նշվել Drupal-ի .htaccess-ում կամ httpd.conf-ում՝ կախված որտեղ եք դնում վերագրագրի կանոնները։ Լռելյայն Drupal-ի .htaccess-ում RewriteBase-ը մեկնաբանված է և լավ աշխատում է շատ կարգավորումների դեպքում։
Եթե մաքուր URL-ները չեն աշխատում, փորձեք փոփոխել RewriteBase-ը։ Օրինակ՝ եթե Apache DocumentRoot-ը /var/www/ է (այսինքն, http://www.example.com/ է ձեր կայքը) և Drupal-ը տեղադրված է /var/www/mysite/ ենթաթղթապանակում, ապա պետք է RewriteBase կարգավորել՝
RewriteBase /mysite
որովհետև այդ դեպքում այն կաշխատի։ Որոշ կարգավորումների դեպքում էլ կաշխատի՝
RewriteBase /
$base_url փոփոխական
Իրականանում, հնարավոր է պետք լինի ձեռքով սահմանել $base_url փոփոխականը settings.php ֆայլում, եթե այն դեռ չեք սահմանել։ Գիտենք, որ FastCGI սերվերներում կարող են խնդիրներ առաջանալ, եթե $base_url-ը մեկնաբանված է (տես բացառման հաղորդումը)։
Բազմակի կայքեր (Multi-site)
RewriteBase աշխատում է, եթե ձեր Drupal տեղադրումը սպասարկում է միայն մեկ կայք կամ բոլոր կայքերը գտնվում են նույն ենթաթղթապանակում իրենց տիրույթներում։ Օրինակ,
RewriteBase /
կաշխատի հետևյալ կայքերին՝
http://www.example.com/
http://www.example2.com/
http://www.example3.com/
RewriteBase /mysite
կաշխատի հետևյալ կայքերին՝
http://www.example.com/mysite
http://www.example2.com/mysite
http://www.example3.com/mysite
Բայց եթե ձեր կայքերը գտնվում են տարբեր ենթաթղթապանակներում, RewriteBase-ը չի աշխատի։ Այդ դեպքում պետք է գրեք հատուկ կանոն յուրաքանչյուր ենթաթղթապանակի համար։ Օրինակ, ձեր Drupal-ը սպասարկում է հետևյալ կայքերը՝
http://www.example.com/
http://www.example.com/mysite
Մաքուր URL-ները ակտիվացնելու համար երկու կայքերին պետք է ավելացնել
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/mysite/ RewriteRule ^ /mysite/index.php [L]
կանոնները վերագրագրից առաջ։
index.php ֆայլի գտնվելու վայրը
Որոշ սերվերի կոնֆիգուրացիաների համար կարող է անհրաժեշտ լինել փոփոխել Drupal-ի .htaccess ֆայլը։ Որոնեք հետևյալ տողը .htaccess-ի վերջում՝
RewriteRule ^ index.php [L]
Եթե ձեր Drupal-ի գլխավոր էջի URL-ն օրինակ http://example.com/subdir/ է, կարող է անհրաժեշտ լինել փոխել index.php-ը /subdir/index.php-ի։ Եթե գլխավոր էջը http://example.com/ է, կարող է անհրաժեշտ լինել /index.php օգտագործել։ Դա պահանջվում է որոշ կոնֆիգուրացիաների համար, բայց ոչ բոլորի։
Մաքուր URL-ների ստեղծում Path մոդուլի միջոցով
Մաքուր URL-ների օգտագործումը ստիպում է Drupal-ին գեներացնել URL-ներ տեսքով "http://www.example.com/node/83"։ Եթե ցանկանում եք փոխել URL-ի "node/##" մասը ինչ-որ ավելի ընթեռնելի, օրինակ՝ "news/june-1st-news", ապա անհրաժեշտ է միացնել Path մոդուլը։ Մանրամասների համար տես Path մոդուլի ուղեցույցի էջը։
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.