htaccess codeigniter mod-rewrite,rewritecond忽略主app目录下的子目录

时间:2012-06-28 08:37:11

标签: apache .htaccess codeigniter mod-rewrite

我已经安装了codeigniter,正在运行,一切都很好。除了我想现在为我的用户提供上传图像的方法。我认为放置文件夹的唯一地方是在应用程序目录中(在我的情况下恰当地重命名为“app”)。无论如何。由于它是一个MVC,我需要在所有地方运行重写条件。我认为这是其中一种情景。

我需要的是在app文件夹

中有一个适用于此子文件夹的条件

我原来的重写条件是

RewriteCond $1 !^(index\.php|static|robots\.txt)

哪个适用于那些但不适用于这一个案例,所以我需要一个适用于上述但支持app / upload的新条件(这是否可能)?

2 个答案:

答案 0 :(得分:2)

如果你将资产保持在application/之外(如罗伯特所提到的那样),生活就会轻松得多。

有大量优秀的资产管理Sparks你也可以选择协助解决这个问题 - 我为我的CI项目撰写了一篇名为sk-asset的项目,该项目提供了大量的视图助手和帮助。结构如下:

  • / CIAppRoot
    • 资产/
      • CSS /
      • 下载/
      • IMG /
      • JS​​ /
      • 少/
      • SWF /
      • 上传/
      • XML /
    • 应用/
    • 系统/

... htaccess设置可以简单地绕过现有文件/目录/等的CI路由:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On

  # block hidden directories
  RewriteRule "(^|/)\." - [F]

  RewriteCond $1 !^(index\.php|assets|robots\.txt|favicon\.ico)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
</IfModule>

答案 1 :(得分:1)

上传文件夹不必位于您的应用程序目录中。事实上,如果它不在其中,它会更好。这样,您可以将应用程序与内容(上载)分开。 如果你这样做,你也不需要重写条件。 这就是我的CI目录的样子:

/application
/assets
/uploads
/system