RewriteRule вызывает непреднамеренное 301, когда нет косой черты - PullRequest
0 голосов
/ 19 февраля 2019

Корневой .htaccess моего локального сервера содержит следующие правила, не более того:

RewriteEngine on
RewriteBase /

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*)$ site/$1

Намерение заключается в том, чтобы тайно «перекоренить» все URL-адреса в папку \site\, чтобы всевне этой папки, в некотором роде, становится приватной.RewriteCond здесь для предотвращения зацикливания в бесконечную последовательность site/site/site/site/...

Давайте создадим пустую папку \site\ на сервере.
В моем веб-браузере я теперь перейду к boop/ иboop.Обе страницы дают мне ожидаемые 404, говоря, что site/boop и site/boop/, соответственно, не были найдены на сервере.Как и ожидалось.

Теперь я создам файл \site\boop\index.php.
. При переходе к boop/ вновь созданная страница отображается в соответствии с назначением.
Но когда я перехожу к boop... дела идут наперекосяк:

Мой браузер явно перенаправлен (301) на site/boop/, что, в свою очередь, приводит к внутреннему перенаправлению сервера на /site/site/boop/ и заканчивается здесь на 404.

(Создание пустой папки \boop\ достаточно для такого поведения. index.php здесь, чтобы проверить, работает ли перенаправление в первом случае.)

Откуда этот 301?Какое это имеет отношение к завершающей косой черте в URL?
Я искал значение последней косой черты, но все ресурсы, которые я нахожу, говорят, что это «технически» ничего не значит, и говорят только об эстетических соглашениях.


Я использую локальный сервер с 64-битным WAMP 3.0.6, Apache 2.4.23 и PHP 7.0.10

...