2012-04-10 8 views
1

URL書き換えに関する問題が発生しました。私はApacheのmodリライトを使ってURLを書き換えています。例えば、私は 疑問符を含むURLを書き換えます。

  • request.php?string=some/path/にURL

    • www.website.com/some/path/を書き換えます。

    次に、このURLに対して具体的な回答を示します。今、私の書き換えルールは次のようになります。

    RewriteRule ^([a-z_/\?]+)$ request.php?string=$1 
    

    しかし、問題は、私はURL www.website.com/some/data/?id=12&name=Johnを持っており、それを書き換えた場合、私はこのような何かを得る始まる:request.php?string=some/data/?id=12&name=Johnを。この例では、別の疑問符がPHPを混乱させるようです。私が得るrequest.phpの$_GET['string']を取得しようとすると、それはsome/data/です。さらに参考のために

    、Gmailは、それはURLだと似たようなことを行います。
    https://mail.google.com/mail/?ui=1&shva=1

  • +5

    ['[QSA]'](http://httpd.apache.org/docs/2.4/rewrite)を試したことがありますか? /flags.html)フラグはまだありますか? – mario

    答えて

    5

    私はQSA flag (Query String Append)に見てみると(マリオのように)示唆しています。さらに、正規表現の文字クラスの疑問符を取ります:

    RewriteRule ^([a-z_/]+)$ request.php?string=$1 [L,QSA] 
    
    +0

    素晴らしい答えのためにあなたとマリオの両方に感謝します。それは私が期待していたよりもうまく機能します。なぜなら、自分自身でクエリを解析する必要があるからです。 –

    +0

    @knustrle:いいえ、あなたはそうではありません。それは書類にも書かれています。 query-info-partsをチェックする場合は、RewriteCondを使用する必要があります。 RewriteRuleはパスについてのみです。 – hakre

    関連する問題