Metode de plată Abuse

Activați Apache Mod Rewrite

06.03.2022, 00:06

Atunci când un utilizator introduce un anumit URL într-un browser și apasă Enter, serverul web care primește cererea încearcă să găsească un fișier pe server la calea specificată în URL. Dacă nu se găsește nimic de-a lungul căii, se deschide un fișier index, cum ar fi index.html sau index.php. dacă nu se găsește nimic, se returnează o eroare 404. Nu am avea URL-uri frumoase și ușor de înțeles dacă lucrurile nu ar funcționa așa cum o fac acum. Aceste URL-uri sunt utilizate pe multe site-uri. Modulul apache mod rewrite este conceput pentru a rezolva această problemă În acest tutorial vom vedea cum să îl activăm.

Activarea modulului

Dacă totul ar funcționa așa cum este descris, atunci la deschiderea oricărui link al acestui site în directorul rădăcină ar trebui să existe un fișier sau script cu același nume din bara de adrese. Dar nu există. Atunci când solicită acest URL, serverul web face încercări de a găsi un astfel de fișier, dar dacă nu îl găsește, în loc să returneze o eroare 404, transmite controlul modulului mod_rewrite, care pentru toate URL-urile de acest tip execută scriptul index.php, transmițându-i șirul de interogări după domeniu. PHP utilizează apoi aceste date pentru a găsi și a returna pagina de care are nevoie utilizatorul.

Pentru a activa modul rewrite, executați o comandă simplă:

$ sudo a2enmod rewrite

După repornirea serverului web:

$ sudo systemctl restart apache

Doar pentru că modulul este activat la nivelul serverului web Apache nu înseamnă că va funcționa pentru un site web. În acest scop, trebuie să fie configurat în fișierul .htaccess, să se specifice pe ce script să treacă cererile către pagini inexistente. Pentru ca fișierul .htaccess să funcționeze, directiva AllowOwerride: All trebuie să fie adăugată la secțiunea Directory a gazdei virtuale

Ca exemplu:

În continuare, de exemplu, în WordPress trebuie să adăugați linii de genul acesta la fișierul .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Tot codul este plasat în directiva IfModule, permițând codului din interiorul acesteia să fie executat numai atunci când modulul mod_rewrite este activat, în caz contrar aceste linii sunt pur și simplu ignorate. Directiva RewriteEngine On activează modulul pentru directorul curent. Apoi RewriteBase specifică faptul că întregul șir de caractere după domeniu trebuie transmis scriptului. Urmează regulile RwriteRule cu condiții pentru acestea RewriteCond, care este executat strict secvențial.

Una dintre regulile RewriteRule ^index .php$ - [L] spune că, dacă URL-ul conține index.php, URL-ul trebuie rescris la /. În această expresie regulată, este specificat întregul șir de caractere, iar punctul este scăpat cu o bară oblică. Indicatorul [L] înseamnă că URL-ul corespunde acestei reguli, iar următoarele reguli nu trebuie verificate. După ce această regulă este executată, URL-ul va fi rescris și serverul web va presupune că a primit solicitarea /, analiza regulilor va începe din nou și de data aceasta se va potrivi cu ultima regulă.

Condițiile RewriteCond se aplică tuturor regulilor ulterioare. Astfel, RewriteCond %{REQUEST_FILENAME} !-f și RewriteCond %{REQUEST_FILENAME} !-d permit ca ultima regulă să fie executată numai dacă URL-ul nu este un fișier sau un folder. Regula finală redirecționează totul către scriptul ./index.php.

Dacă nu puteți înțelege setările mod_rewrite, merită să vă uitați la ceea ce se întâmplă în interiorul serverului web în timpul redirecționărilor. Pentru a face acest lucru în configurația gazdei virtuale a site-ului, trebuie să adăugați această linie.

De exemplu:

$ sudo vi /etc/apache2/sites-available/001-texts.conf

LogLevel warn rewrite:trace4

Apoi, în fișierul jurnal, care este dat în directiva ErrorLog, veți vedea toate încercările serverului web de a converti URL-ul în conformitate cu regulile dvs. și veți putea înțelege ce faceți greșit. În acest tutorial, am acoperit modul de activare a Apache mod rewrite, precum și modul în care funcționează totul și cum să căutați erorile.