У меня возникли трудности с переписыванием мод_для работы в 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, ничего не происходит. Я уверен, что я что-то делаю
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
, помещенный в корень документа (, куда, как я полагаю, вы его помещаете ), никогда не будет тоже будет обрабатываться.