我想通过网址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
答案 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]
。