Dan*_* B. 5 .htaccess mod-rewrite zend-framework url-rewriting urlencode
我正在使用标准的Zend /public/.htaccess文件(如下所示).
目前我正在尝试将用户转发到特定的控制器/操作,并提供on-success-redirect URL作为URL参数.
生成的URL(通过Zend的URL视图助手组装和编码)如下所示:
localhost/crop/index/successRedirect/localhost%2Fprofile%2Fbasic
Run Code Online (Sandbox Code Playgroud)
但是这种模式显然违反了默认的Zend包mod_rewrite规则:访问URL会产生标准的Apache 404错误; Zend没有收到请求.
当手动重新形成最终参数时,请求按预期工作:
localhost/crop/index/?successRedirect=localhost%2Fprofile%2Fbasic
Run Code Online (Sandbox Code Playgroud)
然而,这需要一个hackish,两步URL生成过程.如果视图助手生成的URL独立工作,那将是理想的选择.
可以做些什么来允许url-encoding通过?任何见解将不胜感激!
这些是我的.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]
Run Code Online (Sandbox Code Playgroud)
像这样启用RewriteLog不会为失败的模式生成输出:
RewriteLogLevel 9
RewriteLog "<path>/rewrite.log"
Run Code Online (Sandbox Code Playgroud)
我尝试了以下两个Q&A提出的解决方案,没有变化:
AllowEncodedSlashes On)QSA指令重写规则)AllowEncodedSlashes On使用您的确切测试 URL 为我解决了这个问题。但是,根据http://httpd.apache.org/docs/2.0/mod/core.html#allowencodedslashes,该指令需要位于服务器配置或虚拟主机中。它在 .htaccess 文件中不起作用。
就我个人而言,我会选择查询字符串解决方案。您能否详细解释一下两步 URL 生成过程的含义?我本以为语法与使用普通 URL 助手非常相似。