Otklanjanje problema sa čistim URL-ovima u Drupalu 8
Osnove
U Drupalu 8 čisti URL-ovi su podrazumevano uključeni i ne mogu se isključiti. Međutim, modul za prepisivanje (rewrite) mora biti omogućen na vašem web serveru.
Proverite adresnu liniju u vašem pregledaču. URL-ovi vašeg sajta ne bi trebalo da sadrže ?q= u URL-u.
Primer ispravnih „čistih URL-ova“
http://www.example.com/node/83
Primer „čistih URL-ova“ koji ne rade
http://www.example.com/?q=node/83
Postoje dodatna uputstva za podešavanje čistih URL-ova za različite sisteme kao što su Apache, WAMP, XAMPP i IIS.
Konfiguracija servera za čiste URL-ove
Vi možete pročitati više o drugim zahtevima web servera
Konfiguracija servera za čiste URL-ove na namenskom serveru sa httpd.conf
Uključivanje čistih URL-ova na namenskom serveru obuhvata sledeće korake:
1. Omogućite mod_rewrite za Apache. Možete kontaktirati vašeg hosting provajdera ili pogledati Apache dokumentaciju za mod_rewrite za detaljnije uputstvo. Najmanje što treba da uradite jeste da proverite da li je mod_rewrite uključen u vašoj Apache instalaciji.
Da biste proverili da li je mod_rewrite dostupan u Apache2, možete u komandnoj liniji uneti sledeću komandu da izlistate sve instalirane Apache module:
apache2ctl -M
Na nekim sistemima ova komanda može biti:
apachectl -M
ili
httpd -M
2. U izlazu proverite da li je rewrite_module naveden među modulima.
Ako modul za prepisivanje nije na listi, moraćete ga ili kompajlirati ili omogućiti kao učitavani modul. Obično, možete reći Apache-u da učita modul tako što ćete uključiti:
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
u vašem Apache konfiguracionom fajlu (pogledajte niže informacije o konfiguracionim fajlovima). Obavezno otkomentarišite AddModule mod_rewrite.c ako je u vašem konfiguracionom fajlu zakomentarisan. Sledeća komanda može raditi za uključivanje modula bez direktne izmene fajlova:
a2enmod rewrite
Imajte na umu da ovi pristupi možda neće raditi za sve kombinacije operativnih sistema i Apache servera – za tačnu sintaksu pogledajte zvaničnu Apache dokumentaciju.
Ne zaboravite restartovati Apache da bi nova konfiguracija stupila na snagu.
3. Sledeći korak je da pronađete odgovarajući Apache konfiguracioni fajl za vaš sajt. U zavisnosti od podešavanja servera, to može biti httpd.conf, fajl specifičan za virtuelni host (vhost.conf), definisani fajl sajta (npr. „default“) ili apache2.conf. Obično se nalaze u /etc/httpd/conf, /etc/apache2 ili u poddirektorijumu; ako nisu, pokušajte komandu:
find /etc -name httpd* or find /etc -name apache2*
da pronađete fajl ako je smešten na drugom mestu u fajl sistemu.
Ako nemate dozvolu za pisanje u ove fajlove i čisti URL-ovi vam ne rade „iz kutije“, možda ćete morati da kontaktirate sistem administratora ili hosting provajdera za pomoć. Ipak, još uvek možete pročitati ove konfiguracione fajlove radi osnovnog otklanjanja problema.
4. Sledeći korak je kopiranje ili uključivanje Drupal podešavanja direktno u konfiguracioni fajl. Ovde su uputstva za uključivanje Drupal direktiva u konfiguracioni fajl. Pogledajte .htaccess fajl u Drupalu za primere pravila kao što su sledeća za Drupal 8:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L]
Ili primer na Debian 8 + Apache2 + ISPConfig sa wildcard podešavanjem da odgovara svim instaliranim sajtovima:
<Directory /var/www/clients/*/*/web/> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
Proverite da li gledate .htaccess fajl za vašu glavnu verziju Drupala (npr. 8.x).
Napomena: Ako ne želite da stavljate rewrite pravila u Apache konfiguracioni fajl, i dalje možete koristiti Drupal .htaccess fajl (kao što je slučaj na virtuelnim hosting platformama). Morate podesiti AllowOverride direktivu u Apache konfiguracionom fajlu (da bi lokalna .htaccess prepisivanja bila dozvoljena na vašem sajtu):
AllowOverride All AccessFileName .htaccess
Pročitajte „Iza kulisa“ sa Apache .htaccess za detaljniji pregled .htaccess fajla. Takođe može biti korisno pregledati primere AllowOverride direktiva za Apache 2.
Napomena o MultiViews: Apache ima funkciju zvanu „MultiViews“ (u širem smislu: „Content Negotiation“) koja omogućava pristup vašim stranicama bez potrebe za ekstenzijom fajla. Na primer, ako imate fajl „valuation.txt“, sajt sa podrškom za MultiViews može pristupiti tom fajlu preko URL-a „example.com/evaluation“. Iako MultiViews mogu biti korisne kada se svesno koriste, mogu praviti probleme kada su Drupal čisti URL-ovi uključeni. Ako niste sigurni šta radite, ne bi trebalo da koristite MultiViews ako planirate da koristite Drupal čiste URL-ove. Međutim, MultiViews nisu uključeni u podrazumevanu Apache instalaciju, tako da verovatno ovo upozorenje neće biti primenjivo. Pogledajte Apache dokumentaciju za više informacija o MultiViews.
Konfiguracija servera za čiste URL-ove na deljenom hostingu pomoću .htaccess
Standardna Drupal instalacija sadrži primer .htaccess fajla koji bi trebalo da bude dovoljan da omogući čiste URL-ove. Kopiranje ovog fajla može biti lako propušteno zbog početne tačke u nazivu fajla. Zato, pre nego što uključite čiste URL-ove, proverite da li ovaj fajl postoji u vašoj Drupal instalaciji.
Da biste to proverili u terminalu, koristite ls -a da biste bili sigurni da su „tačkasti“ fajlovi prikazani.
Ako imate ovaj fajl, ali čisti URL-ovi i dalje ne rade, pokušajte neke od saveta za otklanjanje problema ispod. Ako i dalje ne možete da omogućite čiste URL-ove, kontaktirajte vaš hosting provajder.
Otklanjanje problema
Proverite da li se koristi .htaccess
Apache mora biti eksplicitno konfigurisan da poštuje instrukcije u .htaccess fajlu vašeg sajta. Ovo je po defaultu isključeno, iako ga većina hosting provajdera uključi. To je svrha AllowOverride All direktive gore – da omogući .htaccess fajlu da funkcioniše.
Da proverite da li vaš hosting koristi .htaccess, privremeno dodajte neki besmisleni red u fajl da ga „pokvarite“. Vaš sajt bi odmah trebalo da prikazuje „Server Error 500“ prilikom učitavanja stranice iz tog direktorijuma zbog neispravne konfiguracije. (Odmah uklonite taj besmisleni red.)
Ako to uradite i sajt se ne pokvari – .htaccess se ignoriše i nećete moći koristiti čiste URL-ove dok ne dobijete podršku od hostinga ili ga ne omogućite u httpd.conf kao što je gore opisano. Neki hosting provajderi omogućavaju da uključite ovu opciju preko kontrolnog panela sajta, pa prvo proverite tamo.
Podešavanje RewriteBase
Glavni parametar konfiguracije koji ćete možda morati promeniti za vaš sajt je RewriteBase. On može biti naveden u Drupal .htaccess fajlu ili u httpd.conf fajlu, u zavisnosti gde ste stavili Drupal rewrite direktive (pogledajte gore). Po defaultu je RewriteBase zakomentarisan u Drupal .htaccess i dobro funkcioniše u mnogim konfiguracijama.
Ako imate problema sa čistim URL-ovima, možda ćete morati da promenite ovaj parametar. Na primer, ako je vaš Apache DocumentRoot /var/www/ (tj. /var/www/index.html se učitava kada u browser ukucate http://www.example.com/), a Drupal je instaliran u poddirektorijumu /var/www/mysite/, onda RewriteBase treba da bude:
RewriteBase /mysite
što može pomoći. U nekim konfiguracijama može pomoći i podešavanje:
RewriteBase /
da čisti URL-ovi rade.
$base_url
Možda ćete morati ručno da podesite promenljivu $base_url u fajlu settings.php ako još nije podešena. Poznato je da serveri koji koriste FastCGI mogu imati problema ako je $base_url zakomentarisana (pogledajte http://bugs.php.net/bug.php?id=19656).
Multi-site
RewriteBase radi kada vaša Drupal instalacija služi samo jedan sajt ili kada svi sajtovi koje služi imaju isti poddirektorijum svojih domena. Na primer,
RewriteBase /
radi na sledećim sajtovima:
http://www.example.com/
http://www.example2.com/
http://www.example3.com/
RewriteBase /mysite
radi na sledećim sajtovima:
http://www.example.com/mysite
http://www.example2.com/mysite
http://www.example3.com/mysite
Međutim, ako su sajtovi u različitim poddirektorijumima, RewriteBase neće raditi. Moraćete da napravite pravilo za svaki poddirektorijum. Na primer, vaša Drupal instalacija može da služi sledeće sajtove:
http://www.example.com/
http://www.example.com/mysite
Da biste omogućili čiste URL-ove za oba sajta, morate dodati
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/mysite/ RewriteRule ^ /mysite/index.php [L]
pre postojećih pravila za prepisivanje.
Lokacija fajla index.php
Za neke konfiguracije servera može biti potrebno dodatno menjanje Drupal .htaccess fajla. Pronađite liniju sličnu ovoj na kraju vašeg Drupal .htaccess fajla:
RewriteRule ^ index.php [L]
Moguće je da ćete morati da zamenite index.php sa putanjom do index.php fajla vaše Drupal instalacije (deo posle baze URL-a). Na primer, ako je URL početne strane http://example.com/subdir/, možda ćete morati koristiti /subdir/index.php umesto index.php. Ako je URL početne strane http://example.com/, možda će vam trebati /index.php umesto index.php. Ovo je potrebno za neke, ali ne i sve konfiguracije servera.
Pravljenje čistih URL-ova pomoću Path modula
Korišćenje čistih URL-ova tera Drupal da generiše URL-ove u formatu "http://www.example.com/node/83". Da biste promenili deo URL-a „node/##“ u nešto nalik „news/june-1st-news“, vaš sajt mora da uključi Path modul. Pogledajte stranicu vodiča za Path modul za više informacija o korišćenju Path modula.
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.