问题描述
我对silex非常陌生,但是有基于Java的MVC框架的经验。
I am very new to silex, but have experience with Java based MVC frameworks.
我遇到的问题似乎是如何在URL参数中接受某些特殊字符。
The problem I have seems to be how to accept certain special characters in URL arguments.
我有一个这样定义的控制器:
I have a controller defined as such:
$app->get('/editPage/{fileName}', function ($fileName) use ($app,$action) {
return $app['twig']->render('edit.twig.html',$action->editPage($fileName));
});
这对以下网址非常有用:
and this works great for urls like:
- /myapp/editPage/file.html
- /myapp/editPage/file-2.html
,但是如果我通过编码 /或%2F,则路由没有被拾取,并且得到404。
1. / myapp / editPage / folder% 2Ffile.html
but if I pass an encodes "/" or %2F, the route is not picked up, and I get a 404. 1. /myapp/editPage/folder%2Ffile.html
mod_rewrites规则应将所有不存在的文件路径路由到定义了silex的index.php,因此我不确定发生了什么。
The mod_rewrites rules should route any non-existent file paths to the index.php where silex is defined, so I am not sure what is happening.
我只需要一种使用 /捕获此特定页面的值的方法。没有冲突的子页面,因此,如果有一种通配符路径 /editPage/{.*|filename}/或明显缺少的东西,我会丢失。
I just need a way to capture values with "/" for this particular page. There are no conflicting childpages, so if there is a way to wildcard the path "/editPage/{.*|filename}/" or something obvious I am missing.
推荐答案
对于Silex来说,这不是问题,但是对于Apache。
It's not an issue with Silex but with Apache.
出于安全目的,Apache拒绝将设计的斜杠作为URI的一部分而拒绝。查看此答案:
Apache rejects by design encoded slashes as part of the URI for security purposes. See this answer: https://stackoverflow.com/a/12993237/358813
作为一种变通方法,在查询字符串中传递值是完全可以的:
As a workaround passing the value inside a query string is completely fine:
http://example.com/? file =%2Fpath%2Fto%2Ffile
将起作用,只要您相应地配置Silex。
http://example.com/?file=%2Fpath%2Fto%2Ffile
will work, provided you configure Silex accordingly.
这篇关于Silex无法处理具有%2f的网址变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!