1

根据文档,Silex 允许通过 URL 传入“slugs”以在您的代码中使用。

以下示例有效:

$app = new Silex\Application();

$app->get('/', function () {
    return 'HAI';
});

但是,以下给出了 404 Not Found:

$app = new Silex\Application();

$app->get('/{slug}', function ($slug) {
    return 'HAI' . $slug;
});

我该如何解决这个 404?

如果有任何相关性,这是我的 Apache Vhost:

<VirtualHost 127.0.0.1:80>
    DocumentRoot "/var/www/Silex/web"
    DirectoryIndex index.php

    <Directory "/var/www/Silex/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

...和我的目录结构:

/src
  |-- bootstrap.php
/tests
/vendor
/web
  |-- index.php
4

1 回答 1

3

事实证明,这是一个 Apache 问题。假设您可以使用 .htaccess 文件虚拟主机。您实际上需要同时使用两者

.ht 访问:

FallbackResource /index.php

注意:如果使用Apache 2.2.16 或更高版本,则只能使用 FallbackResource 。

虚拟主机

<VirtualHost 127.0.0.1:80>
    DocumentRoot "/var/www/Silex/web"
    DirectoryIndex index.php

    <Directory "/var/www/Silex/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>

另一种方法是将.htaccess文件的内容(FallbackResource指令)放在 vhost 本身中,并去掉 htaccess。

一旦我添加了 .htaccess,我的第二个示例中的 slug 就起作用了。

于 2013-07-26T16:01:05.260 回答