.htaccess перенаправляет все URL в public / index.php без обратной косой черты на localhost - PullRequest
0 голосов
/ 20 июня 2019

Фон

Я создаю приложение для отслеживания времени с помощью 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]

Надеюсь, кто-нибудь сможет решить проблему с корневым каталогом в конце косой черты или хотя бы подтвердить, что это невозможно. На данный момент правильный ответ отправляется всем, кто может объяснить мои ошибки и превратить это в полезный пост.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Попробуй это. Поместите свой файл .htaccess в папку для отслеживания времени

  RewriteOptions inherit
    <IfModule mod_rewrite.c>
     RewriteEngine on 
     RewriteBase /time-tracker/public/
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.*)$ index.php?/$1 [L]
    </IfModule>
1 голос
/ 20 июня 2019

Попробуйте это сразу после RewriteEngine на

RewriteRule ^(.*)/$ /$1 [L,R=301]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...