Regula de rescrie Apache

Doresc să redirecționez „http://localhost/b.html" --> „http://localhost/a.html" Am încercat RewriteRule pentru asta. Dar cumva nu merge la mine.

Eu folosesc apache2 și httpd.conf-ul meu conține:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule rewrite_module modules/mod_rewrite.so

RewriteEngine On
RewriteRule ^/b.html$ http://localhost/a.html

Când încerc „http://localhost/a.html" îmi arată pagina web. Dar când încerc „http://localhost/b.html" apache2/error_log spune „fișierul nu există : b.html" Lipsește vreo setare pentru a activa rewrite_module?


person ashweta    schedule 16.04.2009    source sursă


Răspunsuri (4)


Problema este în RewriteRule. asta ar trebui sa functioneze:

RewriteEngine On
RewriteRule ^/b.html$ /a.html [L]
  1. potrivirea regulii (^b.html$) nu trebuie să includă bara oblică de pornire. (aceasta funcționează în .htaccess, dar nu în configurația serverului)
  2. ținta de rescriere ar trebui să fie un URI relativ dacă este posibil (adică pe aceeași gazdă)
  3. regula ar trebui să se încheie cu o directivă „ce să faci” - în acest caz [L]eave procesare (nu vor mai fi procesate reguli)
person Piskvor left the building    schedule 16.04.2009
comment
De asemenea, atunci când depanați rescrieri, este mai ușor să puneți regulile într-un .htaccess la DocumentRoot - nu este nevoie să reporniți serverul atunci. - person Piskvor left the building; 16.04.2009
comment
1. este pentru .htaccess - când sunteți în .conf aveți nevoie de / 2. de acord 3. Nu aveți nevoie de acest lucru - a avea [L] când este deja ultima regulă nu face nimic - person Greg; 16.04.2009
comment
+1 Nu sunt sigur de ce a fost votat negativ. [L] nu este strict necesar pentru ultima regulă din fișier, dar este o practică bună să o aveți oricum (deci nu trebuie să vă amintiți să o introduceți când adăugați o nouă regulă) - person cletus; 16.04.2009

Ați verificat dacă în fișierul dvs. de configurare Apache (cel mai probabil httpd.conf) directiva pentru secțiunea Alias ​​sau VirtualHost:

AllowOverride All

Am avut aceeași problemă cu modrewrite care nu funcționează pentru că l-am oprit:

AllowOverride None

Noroc.

person Community    schedule 16.04.2009

Îl aveți în secțiunea virtualhost?

<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^/b.html$ /a.html
</VirtualHost>
person Greg    schedule 16.04.2009

Funcționează acum. A trebuit să fac două lucruri:

  1. Schimbați „AllowOverride None” în /etc/apache2/sites-available/default la „AllowOverride All”.

  2. Puneți regula de rescriere în /var/www/.htaccess în loc de httpd.conf

Nu sunt sigur de ce nu funcționează în httpd.conf. Dar funcționează după ce faci cele două lucruri de mai sus.

person ashweta    schedule 16.04.2009
comment
Exact asta am raspuns ;-) - person ; 16.04.2009