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

Понимание URL-адресов в Apache на Mac

Запуск Apache на Mac Snow Leopard (т. Е. Включен общий доступ к сети).

Пути оцениваются неожиданными способами:
example.com/folder возвращает файл (без исключения) вместо папки.

Если я позвоню example.com/events/March и у меня есть файл events.php в моем корневом каталоге, Apache возвращает эту страницу, а остальная часть пути игнорируется.

Кроме того, этот вызов имеет приоритет над командами в .htaccess.

например. я нуждаюсь example.com/events/March перенаправить на example.com/events.php?month=March
Apache возвращается example.com/events.php без необходимого аргумента.

RewriteEngine on
RewriteRule ^events/(.+)/?$ events.php?month=$1

Если файл events.php не существует (скажем, он называется eventsHandler.php), то приведенное выше rewriteRule прекрасно работает. Итак, я знаю, что проблема не в .htaccess.

Пытался сделать видимыми расширения файлов, не помогло.

Итак, вопросы:

  1. Почему Apache на Mac не использует расширение файла и рассматривает файл как папку?
  2. Почему .htaccess не отменяет это?
  3. Как мне это исправить, чтобы все работало?

В MacOS косая черта («/») является допустимым символом для использования в именах файлов и не является разделителем пути. Вместо этого попробуйте использовать двоеточие в качестве разделителя пути.

Кроме того, не забудьте проверить свои пути во всем коде, от которого вы зависите, потому что иногда вы можете столкнуться с некоторым кодом, который попытается автоматически преобразовать пути после обнаружения ОС. Мы столкнулись с некоторыми подобными проблемами еще во времена Novell NetWare (не с NetWare, которая поддерживала несколько соглашений об именах файловых систем на одном томе, добавляя что-то, называемое «пространство имен» на стороне сервера, но с помощью сторонних инструментов и библиотеки, которые иногда могут ввести в заблуждение).