Фон
Я создаю приложение для отслеживания времени с помощью PHP на моем локальном хосте (MAMP). Структура приложения выглядит следующим образом
htdocs/time-tracker/public/index.php
Выпуск
Независимо от того, сколько конфигураций я пробую, я не могу избежать какого-то странного сбоя с URL.
Что мне нужно
Я хочу следующий результат. Когда я захожу на URL 127.0.0.1:8888/time-tracker
на моем локальном компьютере, я запускаю приложение php, направляя все запросы через htdocs/time-tracker/public/index.php
. Желательно без косой черты, но приоритет состоит в том, чтобы приложение работало.
Мой текущий файл .htaccess
RewriteEngine On
RewriteBase /time-tracker/
RewriteRule ^public\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /public [L]
Обновление
1. Результат изменения параметров $ _GET
Почему-то http://127.0.0.1:8888/time-tracker?debug=true
и http://127.0.0.1:8888/time-tracker
дают мне разные результаты.
http://127.0.0.1:8888/time-tracker?debug=true
приводит к перенаправлению на http://127.0.0.1:8888/public
http://127.0.0.1:8888/time-tracker
приводит к перенаправлению на http://127.0.0.1:8888/Users/etc/etc/htdocs/time-tracker/public
Ни один из этих результатов не является тем, что я хочу.
2. Частично работает
Этот файл .htaccess
заставляет мои перенаправления работать всякий раз, когда я помещаю что-то в $ _GET
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/index.php [L]
Например, 127.0.0.1:8888/time-tracker/?test=test
работает, а 127.0.0.1:8888/time-tracker/
все еще перенаправляет на http://127.0.0.1:8888/Users/etc/etc/htdocs/time-tracker/public
3. Неправильное перенаправление на root
Перенаправление работает на всех путях, кроме корневого. Например, 127.0.0.1:8888/time-tracker/test
и 127.0.0.1:8888/time-tracker/?test=test
оба работают, но не 127.0.0.1:8888/time-tracker/
Я не знаю, почему мое регулярное выражение не подхватит это. Вот мой код
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* public/index.php [L]
4. Видя пустое имя пути
Я отследил это до одной последней проблемы: пустые пути не регистрируются при перенаправлении.
# Settings
Options +FollowSymLinks
DirectorySlash Off
RewriteEngine On
# Rules
RewriteBase /time-tracker/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*|x) index.php?/var=$1 [L]
По какой-то причине он не может перехватить перенаправление, если путь пуст.
5. Достаточно близкое решение
Это лучшее, что я получил. Это на самом деле работает, но я не могу исправить проблему с косой чертой.
# Settings
DirectorySlash On
RewriteEngine On
# Rewrite
RewriteBase /time-tracker/public/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php?/var=$1 [L]
Надеюсь, кто-нибудь сможет решить проблему с корневым каталогом в конце косой черты или хотя бы подтвердить, что это невозможно. На данный момент правильный ответ отправляется всем, кто может объяснить мои ошибки и превратить это в полезный пост.