Htaccess сопоставляет каталоги, когда существует файл с таким же именем - PullRequest
0 голосов
/ 30 ноября 2018

На моем сервере Apache у меня следующая структура:

/www
    .htaccess
    api.php
    index.php

Мой .htaccess - это очень простой файл, который перенаправляет весь трафик на index.php:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

И мой файл index.php просто печатает, какой бы путь не был:

<?php print_r($_REQUEST['path']); ?>

Поэтому, когда я пытаюсь получить доступ к web.com/test, я получаю веб, который выдает Array ( [path] => test ).

Однако, когда я пытаюсь получить доступ к web.com/index или web.com/api, возвращается ошибка 404.Я проверил, что это происходит только тогда, когда я пытаюсь получить доступ к маршруту с именем существующего файла.Как я могу предотвратить это поведение?

1 Ответ

0 голосов
/ 30 ноября 2018

Оказывается, у меня включен MultiViews в файле apache2.conf.Из документов Apache :

Эффект MultiViews заключается в следующем: если сервер получает запрос на / some / dir / foo, если / some / dir имеет MultiViews, включенныеи / some / dir / foo не существует, тогда сервер читает каталог, ища файлы с именем foo. *, и эффективно подделывает карту типов, которая называет все эти файлы , назначая им один и тот же носительтипы и кодировки контента, которые он имел бы, если бы клиент запросил один из них по имени.

Так что мне просто нужно было добавить Options -MultiViews либо в мой apache2.conf (для сервера), либок .htaccess моего проекта (для проектов), чтобы предотвратить такое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...