Puncte:0

Apache2 mod_rewrite aparent nu face nimic

drapel lk

Întâmpin dificultăți în a face mod_rewrite să funcționeze în Apache2 pe Debian 10. Am activat extensia cu

a2enmod rescrie
systemctl reporniți apache2

Și nu a avut erori și pot vedea modulul în

apachectl -M
...
rewrite_module (partajat)
...

Deși când îl adaug la vhost-ul meu în site-urile disponibile

<VirtualHost *:80>
   ServerName default.nothing
   ServerAlias www.default.nothing
   DocumentRoot /var/www/html/public_html/00-default
   <Directory "/volume/dev/html/public_html/00-default">
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Order allow,deny
      Allow from all
      RewriteEngine on
      RewriteRule ^192.168.20.87$ nothing
   </Directory>
   <IfModule mpm_user_module>
      ServerEnvironment apache apache
   </IfModule>
</VirtualHost>

Sperând că va rescrie adresa URL http://192.168.20.87/page.php ca http://nothing/page.php în fila browser. Indiferent ce am pus în RewriteRule, nimic nu pare să se întâmple. Sunt sigur că fac ceva

TheLovelySausage avatar
drapel lk
Din anumite motive, dacă o fac cu .htaccess, funcționează
Gerrit avatar
drapel cn
În configurația vhost trebuie să utilizați un `/` ca prim caracter al expresiei regex. Uneori vedeți regexe `/?url` care sunt menite să funcționeze atât într-un vhost, cât și într-un .htaccess.
drapel kz
@Gerrit Nu atunci când este folosit în interiorul unui `` container (adică un context _directory_), așa cum se arată în întrebare.
Puncte:1
drapel kz
RewriteEngine activat
RewriteRule ^192.168.20.87$ nimic

Din anumite motive, dacă o fac cu .htaccess, funcționează

Deși acest lucru nu se va potrivi cu adresa URL http://192.168.20.87/page.php chiar dacă „o faci cu .htaccess", așa că trebuie să fii făcând altceva?

Regula de mai sus (când este folosită în a <Directory> container) se potrivește cu o adresă URL a formularului http://192.168.20.87/192.168.20.87 (sau http://default.nothing/192.168.20.87 - dacă numele dvs. de gazdă se rezolvă).

The RewriteRule model se potrivește numai cu calea URL, nu cu numele gazdei (de ex. 192.168.20.87). Deci, asta se potrivește împotriva /page.php, (sau pagina.php - cale relativă/fără prefix bară oblică - când este utilizat într-un director context ca <Directory> sau .htaccess.)

Deci, acesta ar trebui să fie ca următorul:

RewriteRule ^page\.php$ nimic

(Deși nu este clar ce încercați să faceți aici, ce este „nimic”? Dacă încercați să declanșați un 404, atunci acesta nu este chiar modalitatea de a face acest lucru.)

După cum @Gerrit a menționat vag în comentarii, atunci când RewriteRule directiva este folosită într-un Server sau virtualhost context (adică nu în <Directory> sau .htaccess containere - a director context) apoi calea URL potrivită de RewriteRule directiva este relativă la rădăcină, începând cu o bară oblică, deoarece directiva este procesată mult mai devreme, înainte de a fi mapată la sistemul de fișiere. de exemplu. ^/pagina\.php$.


ACTUALIZAȚI:

DocumentRoot /var/www/html/public_html/00-default
<Directorul „/volume/dev/html/public_html/00-default”>

Tocmai am observat că dvs DocumentRoot și <Directory> directivele fac referire la două locații diferite ale sistemului de fișiere?! Cu informațiile limitate din întrebare, aceasta <Directory> containerul nu va fi niciodată procesat.

Dar dacă nu aveți directive suplimentare în altă parte (pe care presupun că trebuie să le aveți), atunci oricare .htaccess nici fișierul plasat în rădăcina documentului (care este locul în care presupun că îl puneți) nu va fi niciodată procesat.

TheLovelySausage avatar
drapel lk
Puneam prostii încercând să eșuez, întrebarea era mai degrabă să încerc să fac ca mod_rewrite să facă orice, dar îl pot face să facă lucruri doar cu htaccess
drapel kz
@TheLovelySausage Ei bine, directiva pe care ați postat-o ​​inițial va eșua - pur și simplu nu va face nimic, deoarece nu va corespunde cererii. Dacă aveți un fișier `.htaccess` cu orice directivă mod_rewrite, atunci acesta va suprascrie complet `` container în configurația serverului (nu va face nimic). Pentru a clarifica, reporniți Apache de fiecare dată când faceți modificări la configurația serverului?
drapel kz
@TheLovelySausage Tocmai am observat că `DcoumentRoot` și `Directivele ` fac referire la două locații diferite ale sistemului de fișiere?! În configurația pe care ați postat-o, aceasta va însemna `` containerul nu este niciodată procesat. Mi-am actualizat răspunsul. (Unde pui fișierul `.htaccess`?)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.