.htaccess用相对链接问题隐藏index.php

时间:2012-07-14 00:15:37

标签: html apache .htaccess codeigniter

这几天我正在尝试使用CodeIgniter。

默认情况下,URI中的index.php就像这样

http://www.example.com/index.php/home

home是控制器内的一个函数

但我不想要index.php所以我创建了.htaccess文件:

Allow from all
RewriteEngine On
RewriteBase /

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

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

基本上它会自动添加“index.php”,除非conds匹配。

然而事情就是这样:
对于这样的URI:http://www.example.com/home
一切正常。

对于这样的URI:http://www.example.com/home/
然后我的网页中的相关链接变得疯狂 例如: css/common.css被重定向到index.php/home/css/common.css,导致找不到css文件。

日志是这样的:

strip per-dir prefix: [dir to my site]/home/css/common.css -> home/css/common.css
applying pattern '^(.*)$' to uri 'home/css/common.css'
rewrite 'home/css/common.css' -> 'index.php/home/css/common.css'
add per-dir prefix: index.php/home/css/common.css -> [dir to my site]/index.php/home/css/common.css
trying to replace prefix [dir to my site]/ with /
internal redirect with /index.php/home/css/common.css [INTERNAL REDIRECT]
add path info postfix: [dir to my site]/index.php -> [dir to my site]/index.php/home/css/common.css
strip per-dir prefix: [dir to my site]/index.php/home/css/common.css -> index.php/home/css/common.css
applying pattern '^(.*)$' to uri 'index.php/home/css/common.css'
pass through [dir to my site]/index.php

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

这里的问题不是你的重写规则 - 它们没问题。发生的事情是浏览器认为/home/末尾有一个斜线是一个真实的目录,因此它会将所有相对链接作为前缀,使其成为它所认为的目录。然后,浏览器会删除对CSS文件的请求,路径/home/css/common.css,当然,它会被重写,因为它与您的支票不匹配。

我在这里看到的最快的解决方案是使用CSS文件的绝对路径。只需将它们链接为/css/common.css,而不是您现在拥有的相关链接。