Код поджигающего подкаталога Вопрос - PullRequest
1 голос
/ 17 декабря 2009

Я пытаюсь разрешить доступ к каталогу "trac" и всем его подкаталогам через URL http://www.domain.com/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 ]

2 голосов
/ 19 декабря 2009

Вам даже не нужно упоминать / trac / в вашем .htaccess. Это ТОЧНО точка

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 голос
/ 18 декабря 2009

правила перезаписи выполняются по порядку ... так что попробуйте

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}
0 голосов
/ 18 декабря 2009

Если вы удалите две последние строки, это должно сработать.

RewriteCond %{REQUEST_FILENAME} !-f проверяет, что вы не запрашиваете файл. Если это так, это условие не выполняется и правило RewriteRule ^(.*)$ index.php?/$1 [L] никогда не выполняется.

...