相关疑难解决方法(0)

Apache2重写,查询字符串转义两次

在虚拟主机配置文件中使用此规则会导致查询参数的双重转义:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Run Code Online (Sandbox Code Playgroud)

例如:

http://example.com?f=hello%20world
Run Code Online (Sandbox Code Playgroud)

导致

https://example.com?f=hello%2520world
Run Code Online (Sandbox Code Playgroud)

请注意"%25"转义为"%"符号.为什么会这样?

apache mod-rewrite query-string

9
推荐指数
1
解决办法
2518
查看次数

URL编码参数打破了默认的Zend重写规则

我正在使用标准的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提出的解决方案,没有变化:

.htaccess mod-rewrite zend-framework url-rewriting urlencode

5
推荐指数
1
解决办法
4185
查看次数