1

ネットで見つけたチュートリアルを使用して、独自の MVC PHP フレームワークを作成しようとしています。しかし、htaccess ファイルの rewrite_mod を理解するのに問題がありました。ここに最初の部分があります:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    public/     [L]
    RewriteRule    (.*) public/$1    [L]
 </IfModule>

1) チュートリアルに書かれているように、これらのルールはすべてのリクエストを public フォルダーにリダイレクトするため、最初の質問はなぜ 2 つのルールがあるのか​​ということです。1番目と2番目の意味。1 つ 2) 2 つ目の部分は、public フォルダー内の別の htaccess ファイルで、以下を含みます。

<IfModule mod_rewrite.c>
RewriteEngine On

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

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

</IfModule>

2 番目の部分は、url を index.php?url=$1 に書き換えます。この部分は明らかですが、この部分は私には少し難しいです。

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

私はそれについて学び、リクエストはファイルまたはディレクトリであってはならないことを伝えますが、index.phpはファイル(パブリックディレクトリ内)です。最後の .htaccess ファイル (パブリック ディレクトリ内) を削除したときに、次のエラーが発生した理由をもう一度質問してください。

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at admin@127.0.0.1 to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

この部分だけを含む htacces しかない場合、うまく機能しますか?

<IfModule mod_rewrite.c>
RewriteEngine On
</IfModule>

本当にありがとう 。

4

1 に答える 1

2

fixとルート .htaccessを組み合わせることができます。

RewriteEngine on
RewriteRule !^public/ public%{REQUEST_URI} [L]

これは/public/<uri>、REQUEST_URI がで始まらない場合に転送することを意味します/public

今いくつかの説明。

DOCUMENT_ROOT/.htaccess:

RewriteRule    ^$    public/     [L]
RewriteRule    (.*) public/$1    [L]
  1. 最初のルールはpublic/、リクエスト URI が空である場合に内部的に転送されます。http://site.com/
  2. 2番目のルールは、URIを内部的に転送していますpublic/<URI>

DOCUMENT_ROOT/public/.htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

ここで公開ディレクトリ内:

  1. RewriteCond %{REQUEST_FILENAME} !-fリクエストが有効なファイルではない場合を意味します
  2. RewriteCond %{REQUEST_FILENAME} !-dリクエストが有効なディレクトリに対するものではない場合を意味します
  3. RewriteRule ^(.*)$ index.php?url=$1にリクエストを転送することを意味しますindex.php?url=<uri>

参考:Apache mod_rewrite の紹介

于 2013-10-19T17:28:53.243 に答える