Я использую простой .htaccess для обработки всего с помощью сценария PHP:
RewriteEngine on
RewriteRule . index.php
Мой index.php просто отображает переменные сервера в данный момент (с print_r($_SERVER)
); Все работает нормально, я набираю что угодно в URL и index.php отображается содержимое. Однако, учитывая эту структуру:
test/ # document root
folder/ # empty folder
index.php
.htaccess
Я заметил, что доступ [site]/folder
сначала перенаправляет браузер на [site]/folder/
а затем показывает правильный index.php содержание. Почему это происходит? Разве правило перезаписи не должно перенаправлять все «как есть»?
Это используется с виртуальным хостом, настроенным для локального тестирования веб-сайта. Сконфигурирован по минимуму. Могли ли быть загружены другие файлы apache до моего .htaccess?
<VirtualHost *:80>
ServerName test.local
DocumentRoot /Library/WebServer/Documents/test/
</VirtualHost>
В настоящее время используется OS X 10.10.
Как определено в комментариях выше, DirectorySlash
Директива управляет этим конкретным поведением Apache, и rewriterule не вызывает его. Эта директива по умолчанию на. Если вы установите его на выключен, тогда, когда URI, который сопоставляется с каталогом в файловой системе, запрашивается без косой черты в конце, Apache не будет перенаправлять запрос на адрес с косой чертой в конце.
Более подробная информация в документации здесь: https://httpd.apache.org/docs/current/mod/mod_dir.html#directoryslash