代码点火器子目录问题

时间:2009-12-17 17:07:59

标签: .htaccess mod-rewrite codeigniter

我想通过网址http://www.domain.com/trac/

来访问“trac”目录及其所有子目录

我正在使用codeginiter框架,我的目录结构看起来像

.htaccess
index.php
system
trac

我可以访问abov url,但问题是trac子目录中包含的脚本和其他文件,即:trac / chrome / common / css / trac.css不可访问404.这是我的.htaccess代码。请帮忙。

RewriteEngine On
RewriteRule ^$ index.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
RewriteCond $1 !^trac/
RewriteRule ^trac/(.*) /trac/$1

3 个答案:

答案 0 :(得分:2)

您甚至不需要在.htaccess中提及/ trac /。

这完全是重点
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

您正在设置两个“重写条件”。第一个说,“只要请求不是文件。”第二个说“或者只要请求不是目录”。

然后

RewriteRule ^(.*)$ index.php?/$1 [L]

将其他所有内容发送到index.php,其中CI接管。只是为了记录,我在每个项目中使用的完整.htaccess:

Options +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

如果您对RewriteCond %{REQUEST_URL} ^system.*行感到困惑,它只会存在,因此对/ system /文件夹的任何浏览器请求始终都会路由到index.php,因此会被忽略。

答案 1 :(得分:1)

重写规则按顺序执行...所以试试这个

RewriteCond %{REQUEST_URI} !^/trac/
RewriteCond $1 !(index\.php/)
RewriteRule ^(.*)$ index.php?/$1 [L]

说明:

if the uri DOES NOT start with trac
if the uri IS NOT index.php
rewrite url as index.php?/{rest of the url}

答案 2 :(得分:0)

如果你删除最后两行,它应该可以工作。

RewriteCond %{REQUEST_FILENAME} !-f检查以确保您没有请求文件。如果是,则此条件失败,并且永远不会执行规则RewriteRule ^(.*)$ index.php?/$1 [L]