htaccess重定向到公共和应用程序文件夹

时间:2013-04-26 18:37:32

标签: php apache .htaccess

我有一个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]

对“文件”中文件的访问是正确的。

我认为重定向到文件文件夹之后是文件夹重定向到公用文件夹,但它不应该是。

1 个答案:

答案 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 * 添加 应用程序 ,似乎在重定向到应用程序目录后重定向也是公共文件夹。