Корневой .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