MVC プロジェクトのディレクトリ構造は次のとおりです。
/
| .htaccess
| index.php
+---application
| +---app
| | +---controller
| | | AppController.class.php
| | +---files
| | | style.css
| | +---model
| | \---views
| | AllApps.php
| | Main.php
| \---login
| +---controller
| | LoginController.class.php
| +---files
| | application.js
| | login.css
| | background.png
| +---model
| | LoginModel.class.php
| \---views
| Login.php
\---public
| .htaccess
| index.php
+---css
| bootstrap.css
+---js
| bootstrap.js
| jquery.js
ルート ディレクトリの htacces ファイルには、次のものが含まれています。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule (.*) public/$1 [L]
</IfModule>
一方、パブリック フォルダーの htaccess ファイルには次のものが含まれます。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?url=$1&%{QUERY_STRING} [PT,L]
</IfModule>
必要なのは、アクセスが次の URL からの場合に、各アプリケーション フォルダー内のファイルにアクセスすることです: mysite.com/__files/login/login.css
ルートフォルダーのhtaccessでこれを試していましたが、うまくいきません。
RewriteRule ^__files/([\d\w]+)/([\d\w]+\.[A-z]{1,4})$ application/$1/files/$2 [L]
RewriteRule ^((?!__files).)*$ public/$0 [L]
$1 はアプリのフォルダー名、$2 はファイル名です。
テスト目的で index.php ファイルに $_GET 配列を出力し、常に出力します
Array
(
[url] => application/login/files/application.js
)
奇妙なことは、私が行にコメントするときです
RewriteRule ^((?!__files).)*$ public/$0 [L]
「ファイル」内のファイルへのアクセスは正しいです。
ファイルファイルフォルダーへのリダイレクト後は、パブリックフォルダーへのフォルダーリダイレクトだと思いますが、そうすべきではありません。