2

この mod_rewrite ルールが何をしているのか、誰か説明できますか?

ファイルにコメントしようとしていますが、コードは私が思っていることとは反対のことを述べているようです

# Enable rewriting of URLs
RewriteEngine on


# Allow specified file types to be accessed
# Thing to test = URL
# Condition = not starting with  
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)


# RewriteRule will only be performed if the preceeding RewriteCond is fulfilled
# Remove index.php from all URLs     
# Pattern = anything (0 or more of any character)
# Substitution = index.php + the rest of the URL    
RewriteRule ^(.*)$ /index.php/$1 [L]  
4

3 に答える 3

5

ブラウザはサーバーにリクエストを送信します (mod_rewrite を使用しているため、Apache)。

プロフィールを取得/編集

Apache はこの要求を受け入れ、構成ファイルで、すべての要求を mod_rewrite 経由で渡すように構成したことを確認します。そのため、文字列「profile/edit」を mod_rewrite に送信します。Mod_rewrite は指定したルールを適用し、リクエストを (以前の投稿で説明した方法で) 'index.php/profile/edit' に変換します。mod_rewrite が完了すると、Apache はリクエストの処理を続行し、「ああ、この男がファイル index.php をリクエストしている」と認識します。そのため、index.php を解析して実行する php インタープリターを呼び出し、引数として「/profile/edit」を取得します。PHPコード(あなたの場合はCI)はこれらの引数を解析し、アプリケーションで適切なモジュールを呼び出す方法を知っています.

つまり、基本的には、url で index.php が指定されていない場合でも、常に index.php を呼び出す方法です。このように、index.php はフロント コントローラーとして機能します。つまり、すべてのリクエストをアプリケーションの適切な場所にルーティングします。

于 2008-10-07T17:22:02.280 に答える
4
^ = begin of line
( = begin group
.* = any character, any number of times
) = end group

2 番目の部分の $1 は、最初の部分のグループに置き換えられます。

これは Symfony のルールですか? アイデアは、クエリ文字列全体をパラメーターとして index.php (フロント コントローラー) に渡し、フロント コントローラーがそれを解析してルーティングできるようにすることです。

于 2008-10-07T16:57:40.020 に答える
2

URL が index.php、images、css、js、robots.txt で始まらない場合、文字列「/index.php/」がプレフィックスとして追加されます。

index.php はおそらく実行可能な php アプリであるため、index.php はその cgi 環境から残りの URL を読み取ることができます。(${PATH_INFO}に格納されています)

于 2008-10-07T16:56:08.680 に答える