Я успешно запускал приложения Slim на нескольких разных серверах и сегодня пытался настроить одно из них на AppFog, используя ту же структуру, но оно не работает нормально.
Я начну со своей структуры каталогов:
.htaccess
/public
.htaccess
index.php
/routes
/Slim
Файл root .htaccess содержит код DocumentRoot из документации AppFog.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^brs.aws.af.cm$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.brs.aws.af.cm$
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) /public/$1 [L]
Каталог /public — это место, где будет находиться мой код API, а также файлы Slim index.php и .htaccess. Файл index.php содержит два простых маршрута:
require '../Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
// Default GET route
$app->get('/', function () {
echo "Default GET route";
});
// Hello World route
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
Сервер настроен по адресу http://brs.aws.af.cm/, и я перечислил основные маршруты ниже:
- / => использует маршрут GET по умолчанию
- /привет/джон => Ошибка 404
- /public/hello/john => работает, но требует "/public" в URL
А вот и лишняя странность. Маршруты из семи символов приводят к ошибке 404, шесть или меньше заканчиваются использованием маршрута GET по умолчанию.
- /123456 => не должно работать, но использует маршрут GET по умолчанию
- /1234567 => ошибка 404
Я совершенно озадачен. Я полагаю, что это как-то связано с кодом DocumentRoot, но я не уверен, что именно. Я также пытался установить
RewriteBase /public/
в /public/.htaccess, но, похоже, это ни на что не влияет.
Любая помощь будет принята с благодарностью. Спасибо!