Мод Apache2_rewrite, по-видимому, ничего не делает

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

a2enmod rewrite
systemctl restart apache2

И не было ошибок, и я вижу модуль в

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

, хотя, когда я добавляю его на мой виртуальный хост на сайтах -доступных

<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, ничего не происходит. Я уверен, что я что-то делаю

0
задан 9 September 2021 в 06:53
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-, если ваши имена хостов разрешаются ).

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

Таким образом, это должно быть похоже на следующее:

RewriteRule ^page\.php$ nothing

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

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


ОБНОВЛЕНИЕ:

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

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

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

1
ответ дан 9 September 2021 в 10:02

Теги

Похожие вопросы