【问题标题】:apache throws 404 - does not get to rewriting rulesapache 抛出 404 - 无法重写规则
【发布时间】:2012-09-25 14:58:42
【问题描述】:

这是我遇到的一个问题:

  • 我的虚拟主机被配置为将不存在的文件重写为 /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 甚至没有进入 规则。很明显,我们想要 htdocs/ 下的东西,那么为什么 apache 不进入目录规则???

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

感谢您的意见

【问题讨论】:

  • 它在正确的 VirtualHost 指令中吗?
  • 您的规则对我来说很好,它会返回我的 init.php 脚本。但是您的 404 是否与 google url 格式错误有关? htp://www.google.com/
  • @CappY 是的 - 它在正确的指令中:)
  • @JonLin nooo ...它还远远没有注意到这一点。 google 只是一个例子 - 真正的 url 不是格式错误的,但 %2F 符号肯定是导致问题的符号。如果我不对其进行 urlencode - 它工作正常!我想知道apache版本(Apache / 2.2.17)是否与它有关......

标签: php apache mod-rewrite redirect


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2011-09-02
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多