Estou tendo dificuldade para fazer o mod_rewrite funcionar no Apache2 no Debian 10. Habilitei a extensão com
a2enmod rewrite
systemctl restart apache2
E não tive erros e posso ver o módulo em
apachectl -M
...
rewrite_module (shared)
...
Embora quando eu o adiciono ao meu vhost nos sites disponíveis
<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>
Esperando que isso reescrevesse o URLhttp://192.168.20.87/page.phpcomo http://nothing/page.php na aba do navegador. Não importa o que eu coloquei no RewriteRule, nada parece acontecer. Tenho certeza que estou fazendo algo
Responder1
RewriteEngine on RewriteRule ^192.168.20.87$ nothing
Por alguma razão, se eu fizer isso com .htaccess, funciona
Embora isso não corresponda ao URL, http://192.168.20.87/page.php
mesmo que você "faça isso com .htaccess
", você deve estarfazendo outra coisa?
A regra acima (quando usada em um <Directory>
contêiner) corresponde a uma URL no formato http://192.168.20.87/192.168.20.87
(ou http://default.nothing/192.168.20.87
- se seus nomes de host forem resolvidos).
ORewriteRule
padrãocorresponde apenas ao caminho da URL, não ao nome do host (ou seja, 192.168.20.87
). Portanto, isso corresponde a /page.php
, (ou page.php
- caminho relativo/prefixo sem barra - quando usado em umdiretóriocontexto como <Directory>
ou .htaccess
.)
Então, isso precisaria ser assim:
RewriteRule ^page\.php$ nothing
(Embora não esteja claro o que você está tentando fazer aqui, o que é "nada"? Se você está tentando acionar um 404, então esta não é realmente a maneira de fazer isso.)
Como @Gerrit mencionou vagamente nos comentários, quando a RewriteRule
diretiva é usada em umservidorouhost virtualcontexto (ou seja, não em <Directory>
ou .htaccess
contêineres - umdiretóriocontexto), então o caminho da URL correspondente à RewriteRule
diretiva será relativo à raiz, começando com uma barra, porque a diretiva é processada muito antes, antes de ser mapeada para o sistema de arquivos. por exemplo. ^/page\.php$
.
ATUALIZAR:
DocumentRoot /var/www/html/public_html/00-default <Directory "/volume/dev/html/public_html/00-default">
Acabei de notar que suas diretivas DocumentRoot
e <Directory>
estão fazendo referência a dois locais diferentes do sistema de arquivos?! Com as informações limitadas da pergunta, este <Directory>
contêiner nunca será processado.
Mas, a menos que você tenha diretivas adicionais em outro lugar (o que presumo que você deva ter), qualquer .htaccess
arquivo colocado na raiz do documento (que é onde presumo que você o está colocando) também nunca será processado.