Прежде всего, я новичок в Silex PHP Framework
и я пытаюсь создать один RESTApi для моего приложения для Android.
Моя структура каталогов
азбука
----vendor
----web
--------index.php
--------. Htaccess
----composer.json
----composer.lock
мой Index.php
кодирование файлов
<?php
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app->get('/hello/{id}', function ($id) use($app) {
return 'Hello '.$app->escape($id);
});
$app->get('/', function () {
return 'Hello!';
});
$app->run();
мое кодирование файла.htaccess
RedirectMatch permanent ^/index\.php/(.*) /$1
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /abc/web/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?!web/).*)$ web/$1 [NC,L]
</IfModule>
Когда я нажимаю этот URL http://127.0.0.1/abc/web/
он отлично работает и получает ответ Hello!
но когда я нахожу URL-адрес http://127.0.0.1/abc/web/hello/123
поэтому я получил ошибку, как это
Not Found
The requested URL /abc/web/hello/123 was not found on this server.
И если я ударил этот URL http://127.0.0.1/abc/web/index.php/hello/123
чтобы он работал хорошо, и я получил ответ "ОК". Hello 123
Итак, MY QUESTION
- это то, как я удаляю имя страницы index.php
и dir
name web
из своего URL-адреса, и я хочу, чтобы мой URL-адрес выглядел так: http://127.0.0.1/abc/hello/123
Это возможно? и как?
Пожалуйста, помогите, заблаговременно.
Итак, что происходит, так это то, что ваше правило перезаписи не отправляет запросы через фронт-контроллер Silex (index.php
), который необходим для работы дружественной маршрутизации. Я настоятельно рекомендую прочитать документацию по маршрутизации, а также пример конфигурации Apache.
Чтобы отсортировать это, для вашего.htaccess может работать следующее:
RewriteRule ^((?!web/).*)$ web/index.php/$1 [NC,L]
Я не совсем уверен в том, к чему ^((?!web/).*)$
регулярное выражение ^((?!web/).*)$
), в идеале это будет:
RewriteRule ^ index.php [QSA,L]
Согласно документации. Ваши требования, однако, могут диктовать вам возиться с этим, пока он не работает.