2016-05-01 8 views
0

特定の.htaccessファイルの仕組みを理解するための助けを探しています。.htaccessファイルの理解

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

RewriteRule ^(.*)$ index.php?url=$1 [L,QSA] 

は、ここで私は私がこれまで理解して考えるものです:

1行目:Apacheが一定のルールに基づいて、URLを変更することができますか?

行2,3:ファイルとディレクトリにアクセスしないことについての何か。しかし、私のブラウザはhttp://localhost/dev/can_i/yes_i_can.phpにアクセスすることに問題はないので、私はそれを正しく理解しているとは思わない。

行4:私はそれを得ます^(.*)$は「何かで始まり終わる」という正規表現ですが、これは正確に何を指していますか?全体のURL?それから、式が追加されたindex.phpに置き換えられます。だから、私たちはlocalhost/index.php?url=localhost/index.php/whatever_came_afterのようなものを手に入れませんか? 最後に[L、QSA]は何をしますか?私はQSAが "クエリ文字列の追加"を意味するが、それがどのように動作するかはわかりません。

ご迷惑をおかけして申し訳ございません。

答えて

5

これは、Apacheのmod_rewriteを有効にする

RewriteEngine on 

この2行は、ブラウザで指定した名前のファイルが存在しない、またはブラウザ内のディレクトリが存在しない場合、その後にprocedeことを意味

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 

以下のルールを書き換えるのRewriteCondは基本的に「これが真である場合にのみ、次のRewriteRuleを実行する」を意味します。 !-lパスのRewriteRuleは基本的には、要求が(サーバのルート以外の任意のURLにマッチする)^(.+)$に一致する行われている場合ことを意味します(ない意味し、-lはリンクを意味します!)

要求がリンクのためではないという条件でありますindex.php?url = $ 1と書き直されます。これは、olleに対するリクエストがindex.php?url = olleとして書き直されることを意味します。

QSAは(オルレ?P = 1がindex.php?url=olle&p=1に書き換えられます、元のURLで渡されたクエリ文字列があります場合は、書き換えに追加されることを意味します。ルールが一致した場合

L「は、ドンを意味し、これ以上のRewriteRulesを処理しないでください

これについての詳細は、上記のリンクを参照してください。書き直しのサポートは少し難しいかもしれませんが、そこから学ぶべきstackoverflowの例がかなりあります。