我有一个像这种模式的URL:
www.example.com/ClassName/MethodName/Arg1/Arg2
Run Code Online (Sandbox Code Playgroud)
这是我的.htaccess文件:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]
ErrorDocument 404 /error404.html
Run Code Online (Sandbox Code Playgroud)
这是我的路由系统:
if (empty($_GET['rt'])) {
require_once('application/home.php');
} else {
require_once('application/search.php');
$url = rtrim ($_GET['rt'], '/');
$url = explode('/', $url);
$ClassName = array_shift($url);
$MethodName = array_shift($url);
$Arg1 = array_shift($url);
$Arg2 = array_shift($url);
}
Run Code Online (Sandbox Code Playgroud)
现在问题是什么?好吧,一切都很好..!除非我?在URL中使用,否则路由对于每个URL都完全正常.(?是波斯人)
例如
www.example.com/ClassName/Methodname/124/??? ??? // it is fine
www.example.com/ClassName/Methodname/254/???? ?? // it isn't fine
// because there is ? ^ …Run Code Online (Sandbox Code Playgroud) 我正在使用Selenium和PHPUnit测试我的Zend Framework应用程序.我有一个需要打开包含编码URL的URL的测试.
$redirectToLocation = urlencode('/myothercontroller/action'); // %2Fmyothercontroller%2Faction
$this->openAndWait('/controller/action/thenRedirectTo/' . $redirectToLocation);
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时,浏览器尝试打开解码后的URL:
/controller/action/thenRedirectTo//myothercontroller/action
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能让selenium打开编码的URL?
更新:实际上......结果是selenium正在做它的工作,但似乎Apache在它到达控制器之前解码URL:
The requested URL /controller/action/thenRedirectTo//myothercontroller/action was not found on this server.
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
更新:这是关于我遇到的同样问题的完整对话:http://old.nabble.com/URL-Encoding-td18850769.html.他们的解决方法是对网址进行base64编码,但这对我来说还不够好.我可以在短期内使用这个解决方案,但我想知道这个问题的真正原因是什么,所以我可以消除它.
更新:我有一个同事认为Zend Framework路由请求的方式可能存在问题.你认为情况可能如此吗?