2

这是我遇到的一个问题:

  • 我的虚拟主机配置为将不存在的文件重写为 /init.php?REQUEST。例如:www.test.com/module/action 将重写为 /init.php?module/action。这是一个非常常见的功能,通过以下方式实现:

    <Directory /path/to/test.com/htdocs/>
    
      RewriteEngine on
      RewriteBase /
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(.*)$ init.php?$1
    
    </Directory>
    
  • 现在我试图打开这个:

    location.href = 'http://www.test.com/module/action/' + encodeURIComponent('htp://www.google.com/');
    

但是现在 apache 甚至没有进入重写部分就抛出了 404 页面。

  • 事实 1:它的发生是因为 %2F 符号(正斜杠)
  • 事实 2:apache 甚至没有进入 <Directory> 规则。很明显,我们想要 htdocs/ 下的东西,那么为什么 apache 不进入目录规则?

有人可以向我解释一下为什么斜线符号会搞砸吗?

谢谢你的想法

4

1 回答 1

2

讨厌回答我自己的问题,但今天早上我醒来时头脑清醒并解决了它......

  • 问题:似乎 %2F 在任何 URL 中都无效。Apache 需要一个特殊的指令来处理它(也许是 AllowEncodedSlashes?)
  • 解决方案1:编码后将%2F替换为%252F
  • 解决方案 2:根本不编码 %2F (不适合我的情况)
  • 解决方案 3:将 %2F 传递到查询字符串中(对我的情况也不好)

因此,如果将来有人遇到这种情况 - 现在您有一些解决方案可供选择:)

于 2012-09-26T06:24:00.697 回答