apache抛出404 - 没有重写规则

时间:2012-09-25 14:58:43

标签: php apache mod-rewrite redirect

这是我遇到的一个问题:

  • 我的virtualhost配置为将不存在的文件重写为/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甚至没有进入&lt; Directory&gt;规则。显然我们想要htdocs下的东西/为什么apache不能进入目录规则???

有人可以向我解释为什么斜线符号弄乱了吗?

感谢您的想法

1 个答案:

答案 0 :(得分:2)

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

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

因此,如果将来有人遇到此问题 - 现在您可以选择一些解决方案:)