CodeIgniter .htaccess和base_url()问题

时间:2012-06-25 13:00:52

标签: php .htaccess codeigniter base-url

我最近开始使用CodeIgniter,而且我在.htaccess和base_url()函数方面遇到了一些问题。我希望这只是一个noob错误并快速修复!

接下来发生的事情是,现在使用.htaccess,index.php从网址中消失了,这是惊人的,但现在我遇到了将样式表和js文件与我的模板相关联的问题。

在我阅读/观看的所有教程中,他们都包含了.htaccess,然后仍然设置了他们的base_url(),然后使用" link_tag(href);"链接他们的.css但现在我在网址上加倍了。例如,当我尝试添加样式表时,它寻找的路径是:

http://www.mysite.com/site/www.mysite.com/site/css/stylesheet.css

所以我的第一个想法就是删除我的base_url(),以便.htaccess完成所有操作,但它不起作用。使用.htaccess,我可以拥有一个没有index.php但没有链接样式表或JavaScript文件的站点,或者我可以拥有一些带有一些样式的站点,但是处理index.php。必须有一种方法可以同时工作吗?

另外,我做了一个修复,而不是使用link_tag()我只是回显了一个正常的链接标记,它在开头的时候完美无缺:

http://www.mysite.com/

但是如果登录不正确并且我重定向再次加载登录视图,则样式会消失,因为它现在使用相对路径:

http://www.mysite.com/user/login

提前致谢!任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试

RewriteEngine on
RewriteCond $1 !^(css|js)
RewriteRule ^(.*)$ /index.php/$1 [L]

因此www.mysite.com/css/mycss.css通常会在www.mysite.com/something传递给codeigniter的地方检索。

要使用base_url()获取css文件,您需要执行base_url("css/mycss.css"),这会产生"http://www.mysite.com/css/mycss.css"

答案 1 :(得分:1)

更好的.htaccess规则集将是:

#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

这不允许访问您的系统和应用程序文件夹,但允许访问所有其他文件,例如:/ js / *,/ css / *,/ img / *等。