我有一个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]
对“文件”中文件的访问是正确的。
我认为重定向到文件文件夹之后是文件夹重定向到公用文件夹,但它不应该是。
答案 0 :(得分:1)
以下是适用于我自己的代码
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]
我用 * __ files * 添加 应用程序 ,似乎在重定向到应用程序目录后重定向也是公共文件夹。