我有一个 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>
当访问来自以下网址时,我需要访问每个应用程序文件夹中的文件: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]
对“文件”中文件的访问是正确的。
我认为重定向到文件文件夹之后是文件夹重定向到公用文件夹,但它不应该是。