2016-08-22 7 views
2

を返しません。 RewriteRule (.*) index.php?route=$1

しかしGET varにdomain.com/some/urlルートへの要求のために私はindex.php代わりのsome/url

012を取得しますHTTPのVAR REDIRECT_QUERY_STRING

私はroute=some/url
を得る。しかしQUERY_STRINGに私はここで間違っている可能性が何route=index.php

を取得しますか?

PS:$0も、私はRewriteRule . index.php?route=$1を使用している場合は、私はルート= iを取得index.php
を返すどんなリクエストURL。予想通り

答えて

2

$1は機能していますが、問題は、このパターンの使用である:何も一致し

(.*) 

。あなたの書き換えルールは、実際にループしてを2回実行します。なぜなら、あなたはループの前にループがあるからです。RewriteCond

  1. まずそれはURI = some/urlのために実行され、それはURI = index.phpのために実行され、$1index.php

は、あなたがこの問題を解決するために、このルールを使用することができなったsome/url

  • 二度目になりindex.php$1ながら、URIになり行動:

    # If the request is not for a valid directory 
    RewriteCond %{REQUEST_FILENAME} !-d 
    # If the request is not for a valid file 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule (.*) index.php?route=$1 [L,QSA] 
    

    ORあなたはindex.phpに既存のファイルやディレクトリを書き換えたい場合は、次に使用:

    RewriteRule ^((?!index\.php$).*)$ index.php?route=$1 [L,QSA,NC] 
    

    これはindex.phpindex.php以外のすべてを書き換えます。

  • +0

    ありがとうございます! 私は[L、QSA]を使いますが、RewriteCondsはどうですか?この特定の問題のためのものですか?私は実際に要求が既存のファイル名やディレクトリ名と一致しても、それでもindex.phpに指示されています。 – Petruza

    +0

    すべてのファイル/ディレクトリを書き直すための私の更新された答えのokチェックルールもあります。 – anubhava

    +1

    ありがとうございますが、条件付きでも正規表現でも 'index.php'を除外しなくてもフラグを追加するだけです – Petruza

    関連する問題