создание htaccess для RESTful (не REST-подобного) API, похоже, где-то ломается

0

Ниже представлен файл.htaccess, который я создал с разных сайтов, которые я запускал в прошлом, ни одна из которых не связана с поведением RESTful, это было бы первым. Из этого я, кажется, просто разбиваю его. Этот файл htaccess находится в корневом каталоге сайта (например: www или public_html).

Все выглядит по порядку, но просто не делает того, чего я ожидаю, и Im не на 100% уверен, почему. Я только хочу, чтобы папка api стала моим основным успокоительным сервисом. Поэтому любые вызовы domain.com/api/должны направляться через основной обработчик, который я придумаю, в этом случае index.php в папке /api/. Прямо сейчас все, что у меня есть, это index.php - это строка "Тестирование" только для проверки правил htaccess ниже. Я даже не вижу, что в браузере появилось "Тестирование", я поработал с ним несколькими разными способами, и лучше всего я получил "No Input file" ("Нет файлов ввода") каких-либо идей?

Options +FollowSymLinks -MultiViews
ErrorDocument 404 /index.php?error=404
DirectoryIndex index.php

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond $1 !^(index\.php|assets|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/api/(.*)$ /api/index.php/$1 [L,QSA,NC]
</IfModule>
Теги:
rest
.htaccess
mod-rewrite

1 ответ

0

Ведущая косая черта в правиле перезаписи не будет соответствовать. Поэтому domain.com/api/ никогда не будет работать так, как вы сейчас. RewriteRule игнорирует ведущий " / " в URI. Вы можете удалить ведущую / перед папкой api в начале правила или использовать ? чтобы сделать его необязательным, и таким образом он будет работать в httpd.conf или файле htaccess. Очистите кеш и попробуйте это обновление.

Вы должны это сделать, и это будет немного проще.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond $1 !^(index\.php|assets|robots\.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/?api/(.*)$ /api/index.php [L,QSA,NC]
</IfModule>

Тогда в index.php вы можете сделать

$request = $_SERVER['REQUEST_URI']);
  • 0
    сделал это, переход на domain.com/api/ дает мне файл index.php, однако переход на domain.com/api/foo/bar/bazz дает мне No input file specified.
  • 0
    Ваш index.php выполняет маршрутизацию или использует строку запроса?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню