索引路由的可选参数

Optional parameters on index route

我有一个非常简单的应用程序,我打算在其中选择性地接受索引路由上的参数,以便用户可以转到 http://example.com/http://example.com/somethingrandom 我希望能够捕获somethingrandom 作为可选参数,但我运气不好。这是我的路线:

$app -> get('/(:random)', function($random=null) use($app) {
    ... do some stuff
});

根据Slim documentation/ 需要 括号内。所以尝试:

$app -> get('(/:random)', function($random=null) use($app) {
    ... do some stuff
});

所以让这个工作不是缺乏对 slim 框架的理解,而是与我在 OS X 上的默认 apache2 设置有关。默认情况下,在 OS X 的更高版本中,PHP 未启用。这不是 MY 问题,但它是部分原因。我按照 this 教程来确保我的设置是正确的。除了本文之外,我还必须取消注释加载 mod_rewrite 模块的行。

然后我在 /etc/apache2/extra/httpd-vhosts.conf

中创建了一个虚拟主机
<VirtualHost *:80>
  DocumentRoot "/Users/tbm/Sites/example.com"
  ServerName shor.ty
  <Directory "/Users/tbm/Sites/example.com">
    Options FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

并将 127.0.0.1 example.com www.example.com 添加到我的主机文件中,这样我就可以从我的浏览器中使用域名访问该站点。

最后,感谢启用 mod_rewrite 模块,我创建了一个 .htaccess 文件,确保所有请求都通过 index.php 允许 slim 路由器接管并显示正确的第

Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /index.php [QSA,L]

完成所有这些后,我就可以使用以下语法解决我的问题

$app -> get('/(:random)', function($random=null) use($app) {
  ... do some stuff
});

现在的不同之处在于,当我访问位于 /some_string 的页面时,apache 被告知重写请求,然后 运行 index.php 调用 slim 以找到正确的路由并呈现正确的页面。我希望这是有道理的