0

私は、MVC マイクロフレームワークの書き換えルールを見つけようとして、かなりの時間を費やしています。パターンurl.com/:controller/:action/:paramsに従っていますが、アセット (css、js、または png など) が要求されたときに、それらを書き換えたくありません。これが私の基本的なフォルダー構造です。

index.php
app/
--> Config
--> Controllers
--> Layout
--> Lib
--> Models
--> Views
assets/
--> app/
    --> ...
--> vendor/
    --> ...

したがって、リクエストが上記の URL パターンに一致する場合は、index.php ファイルにルーティングする必要があります。アセットフォルダー内の何かと一致する場合は、影響を受けずに通過できるようにしたい.

これは私が作成した現在の .htaccess であり、前後に変更しています。

RewriteEngine On
RewriteBase /

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\.(jpg|png|js|css)$

RewriteRule ^([^/]+)(/)([^/]+)(/)(.*) index.php?controller=$1&action=$3&params=$5 [L]
RewriteRule ^([^/]+)(/)(.*) index.php?controller=$1&action=$3&params= [L]
RewriteRule ^([^/]+)(/) index.php?controller=$1&action=index&params= [L]
RewriteRule ^([^/]+) index.php?controller=$1&action=index&params= [L]

URL パターンは正常に一致しますが、何らかの理由で、assets フォルダーへの要求もすべて書き換えられます。さまざまなテストを行った結果、 「最後」を意味するLフラグが、それ以上の書き換えの処理を停止しないことがわかりました。

MVCは非常に一般的なパターンであるため、他の人が以前にこの問題に対処しなければならなかったことを私は知っています。誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

1

そのフォルダを除外してみてください:

RewriteCond %{REQUEST_URI} ^/assets.*$
RewriteRule ^(.*)$ - [L,NC]

そして私は使用します:

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

それ以外の:

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
于 2013-01-15T13:46:46.730 に答える