Code Igniter SubDirectory Question
I am trying to let the "trac" directory and all of it's subdirectories be accessible through the url http://www.domain.com/trac/
I am working with the codeginiter framework and m开发者_运维百科y directory structure looks like
.htaccess
index.php
system
trac
I can access the abov url fine, but the problem is the scripts and other files contained in trac subdirectories ie: trac/chrome/common/css/trac.css are not accessible and 404. Here is my .htaccess code. Please help.
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
You don't even need to mention /trac/ in your .htaccess. That's EXACTLY the point of
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
You're setting two "Rewrite Conditions." The first one says, "As long as the request isn't a file." The second one says "OR As long as the request isn't a directory."
Then
RewriteRule ^(.*)$ index.php?/$1 [L]
Sends everything else to index.php, where CI takes over. And just for the record, my full .htaccess that I use on every project:
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]
If you're confused about the RewriteCond %{REQUEST_URL} ^system.*
line, it only exists so that any browser requests to the /system/ folder is always routed to index.php, and therefor ignored.
rewrite rules are executed in order... so try this
RewriteCond %{REQUEST_URI} !^/trac/
RewriteCond $1 !(index\.php/)
RewriteRule ^(.*)$ index.php?/$1 [L]
Explanation:
if the uri DOES NOT start with trac
if the uri IS NOT index.php
rewrite url as index.php?/{rest of the url}
If you remove the last two lines, it should work.
RewriteCond %{REQUEST_FILENAME} !-f
checks to ensure that you're not requesting a file. If you are, this condition fails and the rule RewriteRule ^(.*)$ index.php?/$1 [L]
is never executed.
精彩评论