我有一个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
根目录下的htaccess文件包含如下内容:
<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]
对"files"中的文件的访问是正确的。
我认为重定向后的文件文件夹是文件夹重定向到公用文件夹,但它不应该。
这是我自己的代码
RewriteEngine on
RewriteCond $1 !^(__files|application) [NC]
RewriteRule (.*) public/$1 [L]
RewriteCond $1 ^(__files)* [NC]
RewriteRule ^__files/([^/]+)/([^/]+)/? application/$1/files/$2 [L,NC]
重要的一行是
RewriteCond $1 !(__files|application) [NC]
我必须添加application与*__files*,似乎在做重定向到应用程序目录后,它也重定向到公共文件夹。