Рейтинг:0

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

флаг lk

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

a2enmod переписать
systemctl перезапустить apache2

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

апачектл -M
...
rewrite_module (общий)
...

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

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

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

TheLovelySausage avatar
флаг lk
По какой-то причине, если я делаю это с .htaccess, это работает
Gerrit avatar
флаг cn
В конфигурации vhost вы должны использовать `/` в качестве первого символа регулярного выражения. Иногда вы видите регулярные выражения `/?url`, которые предназначены для работы как в vhost, так и в .htaccess.
флаг kz
@Gerrit Не при использовании внутри ``контейнер (т. е. контекст _directory_), как показано в вопросе.
Рейтинг:1
флаг kz
RewriteEngine включен
RewriteRule ^192.168.20.87$ ничего

По какой-то причине, если я делаю это с .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 - если ваши имена хостов разрешаются).

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

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

RewriteRule ^page\.php$ ничего

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

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


ОБНОВИТЬ:

DocumentRoot /var/www/html/public_html/00-по умолчанию
<Каталог "/volume/dev/html/public_html/00-default">

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

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

TheLovelySausage avatar
флаг lk
Я просто вставлял ерунду, пытаясь заставить его потерпеть неудачу, вопрос был больше в том, чтобы заставить mod_rewrite вообще что-то делать, но я могу заставить его делать что-то только с htaccess.
флаг kz
@TheLovelySausage Что ж, директива, которую вы разместили изначально, потерпит неудачу - она ​​просто ничего не сделает, поскольку не сможет соответствовать запросу. Если у вас есть файл `.htaccess` с любыми директивами mod_rewrite, то это полностью переопределит `` контейнер в конфигурации сервера (ничего не сделает). Чтобы уточнить, вы перезапускаете Apache каждый раз, когда вносите изменения в конфигурацию сервера?
флаг kz
@TheLovelySausage Я только что заметил, что ваши `DcoumentRoot` и `` директивы ссылаются на два разных местоположения файловой системы?! В опубликованной вами конфигурации это будет означать ``контейнер никогда не обрабатывается. Я обновил свой ответ. (Куда вы помещаете файл `.htaccess`?)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.