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 に答える