Назад | Перейти на главную страницу

Apache добавляет завершающую косую черту, несмотря на RewriteRule

Я использую простой .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