Apache2 mod_rewrite, похоже, ничего не делает

Apache2 mod_rewrite, похоже, ничего не делает

У меня возникли трудности с работой mod_rewrite в Apache2 на Debian 10. Я включил расширение с помощью

a2enmod rewrite
systemctl restart apache2

И не было никаких ошибок и я могу видеть модуль в

apachectl -M
...
rewrite_module (shared)
...

Хотя когда я добавляю его в свой vhost в sites-available

<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>

Надеясь, что это перепишет URLhttp://192.168.20.87/page.phpкак http://nothing/page.php во вкладке браузера. Что бы я ни ввел в RewriteRule, ничего не происходит. Я уверен, что я что-то делаю

решение1

RewriteEngine on
RewriteRule ^192.168.20.87$ nothing

По какой-то причине, если я делаю это с помощью .htaccess, то это работает.

Хотя это не будет соответствовать URL, http://192.168.20.87/page.phpдаже если вы «сделаете это с помощью .htaccess», поэтому вы должны бытьделать что-то еще?

Вышеуказанное правило (при использовании в <Directory>контейнере) соответствует URL-адресу формы http://192.168.20.87/192.168.20.87(или http://default.nothing/192.168.20.87- если разрешаются ваши имена хостов).

TheRewriteRule шаблонсоответствует только URL-пути, а не имени хоста (т.е. 192.168.20.87). Таким образом, это соответствует /page.php, (или page.php- относительный путь/без префикса слеша - при использовании вкаталогконтекст как <Directory>или .htaccess.)

Поэтому это должно быть похоже на следующее:

RewriteRule ^page\.php$ nothing

(Хотя непонятно, что вы пытаетесь здесь сделать, что значит «ничего»? Если вы пытаетесь вызвать ошибку 404, то это не совсем тот способ, которым следует это делать.)

Как @Gerrit небрежно упомянул в комментариях, когда RewriteRuleдиректива используется всервериливиртуальныйхостконтекст (т.е. не в <Directory>или .htaccessконтейнеры -каталогcontext), то URL-путь, соответствующий RewriteRuleдирективе, является корневым и начинается со слеша, поскольку директива обрабатывается гораздо раньше, до того, как она будет сопоставлена ​​с файловой системой. Например, ^/page\.php$.


ОБНОВЛЯТЬ:

DocumentRoot /var/www/html/public_html/00-default
<Directory "/volume/dev/html/public_html/00-default">

Я только что заметил, что ваши директивы DocumentRootи <Directory>ссылаются на два разных расположения файловой системы?! При ограниченной информации в вопросе этот <Directory>контейнер никогда не будет обработан.

Но если у вас нет дополнительных директив где-либо еще (а я предполагаю, что они у вас должны быть), то любой .htaccessфайл, помещенный в корневой каталог документов (куда, как я предполагаю, вы его и помещаете), никогда не будет обработан.

Связанный контент