Silex Routing Issue - Удалить имя страницы и имя каталога

1

Прежде всего, я новичок в 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

Это возможно? и как?

Пожалуйста, помогите, заблаговременно.

Теги:
.htaccess
silex
symfony1

1 ответ

1

Итак, что происходит, так это то, что ваше правило перезаписи не отправляет запросы через фронт-контроллер Silex (index.php), который необходим для работы дружественной маршрутизации. Я настоятельно рекомендую прочитать документацию по маршрутизации, а также пример конфигурации Apache.

Чтобы отсортировать это, для вашего.htaccess может работать следующее:

    RewriteRule ^((?!web/).*)$ web/index.php/$1 [NC,L]

Я не совсем уверен в том, к чему ^((?!web/).*)$ регулярное выражение ^((?!web/).*)$), в идеале это будет:

    RewriteRule ^ index.php [QSA,L]

Согласно документации. Ваши требования, однако, могут диктовать вам возиться с этим, пока он не работает.

Ещё вопросы

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