url中的codeigniter公共目录

时间:2013-04-05 18:55:47

标签: php .htaccess codeigniter directory rewrite

例如:

- index.php
- /system
- /application
   - /controller
      - test.php (class:test ; function index() ; echo "hi")
- /public
   - style.css

我将浏览器指向http://mysite.com/,它会显示“hi”

如果我想要style.css,我必须指向http://mysite.com/public/style.css

但我想点http://mysite.com/style.css也可以显示style.css

我尝试在系统和应用程序

之前将index.php移动到public add prefix ../

我也在根目录中设置了一个htaccess,然后我可以成功地为http://mysite.com/style.css指向style.css

但还有另一个问题,我不能再指向我的测试控制器,它显示错误404

如何保留两个网址?

更新

root目录中的htaccess:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^public/.+$ - [L]

RewriteCond %{DOCUMENT_ROOT}/public/$0 -f
RewriteRule ^.+$ /public/$0 [L]

RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

当我访问http://mysite.com/style.css时可以显示style.css

但是控制器测试不起作用,我访问http://mysite.com/test/test/index显示404而不是“hi”

1 个答案:

答案 0 :(得分:1)

如果请求的文件来自公共目录

,则可以使用RewriteCond进行测试
# prevent requests for the public directory from being rewritten
RewriteRule ^public/.+$ - [L]

RewriteCond %{DOCUMENT_ROOT}/public/$0 -f
RewriteRule ^.+$ /public/$0 [L]

您必须在Codeigniter规则之前插入此规则,否则该文件可能会被重写为/index.php/...

<强>更新

首先,您必须忽略RewriteCond !-f/!-d

test/index的网址必须为http://mysite.com/test/indexhttp://mysite.com/test