5

我使用标准的Zend /public/.htaccess文件(如下所示)。URL编码参数打破默认的Zend重写规则

目前我正在尝试将用户转发给特定的控制器/操作,并且将成功重定向URL作为URL参数提供。

所得URL(组装经由Zend的URL视图助手编码&)看起来像这样:

localhost/crop/index/successRedirect/localhost%2Fprofile%2Fbasic 

然而这种模式显然违反了默认,Zend的包mod_rewrite的规则:访问所述URL产生一个标准的Apache 404错误; Zend没有收到请求。

当手动重新形成的最终参数如下,该请求可以作为所希望的:

localhost/crop/index/?successRedirect=localhost%2Fprofile%2Fbasic 

然而,这需要一个hackish的,两步URL生成处理。如果视图助手生成的URL独立工作,那将是理想的。

可以做些什么来允许url编码通过?任何有识之士将不胜感激!

这些都是我的.htaccess的内容

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ index.php [NC,L] 

启用RewriteLog像这样不产生输出的故障模式:

RewriteLogLevel 9 
RewriteLog "<path>/rewrite.log" 

我试图通过以下两个Q提出的解决方案& A的,没有变化:

+0

这个建议的解决方案也没有效果:http://stackoverflow.com/questions/6520484/mod-rewrite-urlencoding-an-already-urlencoded-querystring-parameter-any-way-to - 添加'NE'指令以'重写规则' – 2012-02-02 22:11:47

回答

3

AllowEncodedSlashes On固定这对我来说,使用精确检验URL。但根据http://httpd.apache.org/docs/2.0/mod/core.html#allowencodedslashes,此指令需要位于服务器配置或vhost中。它在.htaccess文件中不起作用。

就我个人而言,我会去查询字符串解决方案。你可以扩展你的意思吗?这是一个两步的URL生成过程?我原以为这个语法和使用普通的URL助手非常相似。

+0

果然。在'/ etc/apache2/apache2.conf'中设置这个指令 - 我最初的尝试 - 没有效果。我只是试图在虚拟主机('/ etc/apache2/sites-available/default')中设置它,并且它是成功的。谢谢! – 2012-02-02 23:52:03