Php Silex无限重定向路由问题与已安装的ControllerProviders

Php Silex无限重定向路由问题与已安装的ControllerProviders,php,symfony,redirect,routing,silex,Php,Symfony,Redirect,Routing,Silex,我正在尝试在domain.tld/list下装载一个图书注册表,当除了/list之外没有附加任何内容时,该注册表应打印默认列表,但还提供包括参数的操作,例如: domain.tld/list domain.tld/list/ domain.tld/list?q=search domain.tld/list/?q=search domain.tld/list/following domain.tld/list/following?sort=date domain.tld/list/followi

我正在尝试在
domain.tld/list
下装载一个图书注册表,当除了
/list
之外没有附加任何内容时,该注册表应打印默认列表,但还提供包括参数的操作,例如:

  • domain.tld/list
  • domain.tld/list/
  • domain.tld/list?q=search
  • domain.tld/list/?q=search
  • domain.tld/list/following
  • domain.tld/list/following?sort=date
  • domain.tld/list/following/?sort=date
我使用Silex版本2.2.2

controllers.php:

...
$app->mount('/', new \Controllers\IndexController());
$app->mount('/list', new \Controllers\BookListController());
$app->mount('/info', new \Controllers\BookInfoController());
...
BookListController.php:

class BookListController implements ControllerProviderInterface
{
    public function connect(Application $app)
    {
        /** @var ControllerCollection $ctrl */
        $ctrl = $app['controllers_factory'];
        $ctrl->get('/', 'Controllers\BookListController::listAction')->bind('book_list');
        $ctrl->get('/following', 'Controllers\BookListController::listAction');
        return $ctrl;
    }

    function listAction(Application $app)
    {
        return 1;
    }
}
问题:

<VirtualHost *:80>
    ServerName domain.tld
    DocumentRoot /var/www/***/web

    <Directory "/var/www/***/web">
            Options +FollowSymlinks
            AllowOverride All
            SSLOptions +StdEnvVars
            Require all granted
            <IfModule mod_rewrite.c>
                    Options -MultiViews
                    RewriteEngine On

                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteRule ^(.*)/$ /$1 [L,R=301]

                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-l
                    RewriteRule ^(.*)$ index.php [QSA,L]
            </IfModule>
    </Directory>

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>

    php_flag log_errors on
    php_flag display_errors on
    php_value error_log /var/log/*****

</VirtualHost>
  • 调用domain.tld/list和domain.tld/list/会在带有尾随/和不带尾随/的路由之间进入无限重定向循环

Web服务器配置:

<VirtualHost *:80>
    ServerName domain.tld
    DocumentRoot /var/www/***/web

    <Directory "/var/www/***/web">
            Options +FollowSymlinks
            AllowOverride All
            SSLOptions +StdEnvVars
            Require all granted
            <IfModule mod_rewrite.c>
                    Options -MultiViews
                    RewriteEngine On

                    RewriteCond %{REQUEST_FILENAME} !-d
                    RewriteRule ^(.*)/$ /$1 [L,R=301]

                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteCond %{REQUEST_FILENAME} !-l
                    RewriteRule ^(.*)$ index.php [QSA,L]
            </IfModule>
    </Directory>

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>

    php_flag log_errors on
    php_flag display_errors on
    php_value error_log /var/log/*****

</VirtualHost>

ServerName domain.tld
DocumentRoot/var/www/***/web
选项+FollowSymlinks
允许超越所有
发展+标准
要求所有授权
选项-多视图
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)/$/$1[L,R=301]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-L
重写规则^(.*)$index.php[QSA,L]
发展+标准
上的php_标志日志_错误
php_标志显示上的错误
php\u值错误\u log/var/log/*****
错误配置在哪里?挂载是否可能,或者我是否需要使用其他方法来注册这些路由?

只是一个提醒,