htaccess导致css,url - .htaccess 隐藏index.php 并使用pathinfo 导致css js加载错误

自己搞了个简单的php 框架,使用 "?var=val1&var2=val2" 形式的url 视图加载都正常,

apache下为了美化url, 使用 .htaccess规则 隐藏index.php 并使用pathinfo 格式的url,页面和数据都可以加载,但是 css、js文件路径却变成了 pathinfo 格式的url/public/css/style.css了,导致css、js加载路径出错了。求一个正确的 .htaccess规则,让样式文件正确加载。

目前的出错情况:

项目框架放在 站点根目录下的capframework文件夹下 ,

使用 http://127.0.0.1/capframework/ 访问一切ok,css加载ok,

css url 为:http://127.0.0.1/capframework/public/css/captain.css

当使用 http://127.0.0.1/capframework/article/list/tag/php访问时,css、js就出问题,路径变成了

http://127.0.0.1/capframework/article/list/tag/public/css/captain.css

当前使用的规则为:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

求高手指点,把问题解决

回复内容:

自己搞了个简单的php 框架,使用 "?var=val1&var2=val2" 形式的url 视图加载都正常,

apache下为了美化url, 使用 .htaccess规则 隐藏index.php 并使用pathinfo 格式的url,页面和数据都可以加载,但是 css、js文件路径却变成了 pathinfo 格式的url/public/css/style.css了,导致css、js加载路径出错了。求一个正确的 .htaccess规则,让样式文件正确加载。

目前的出错情况:

项目框架放在 站点根目录下的capframework文件夹下 ,

使用 http://127.0.0.1/capframework/ 访问一切ok,css加载ok,

css url 为:http://127.0.0.1/capframework/public/css/captain.css

当使用 http://127.0.0.1/capframework/article/list/tag/php访问时,css、js就出问题,路径变成了

http://127.0.0.1/capframework/article/list/tag/public/css/captain.css

当前使用的规则为:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

求高手指点,把问题解决

这不是.htaccess的问题啊,你代码里面对css的引用用了类似这种形式吧:

那么当你的页面路径为http://127.0.0.1/capframework/article/list/tag/php时,浏览器认为的css路径就变成在当前目录下,拼接上public/css/captain.css,所以就变成http://127.0.0.1/capframework/article/list/tag/public/css/captain.css。

所以你需要这样

但是这样仍然不对,因为,浏览器就会认为css路劲是http://127.0.0.1/public/css/captain.css。

因此,你还需要手动加入根目录

然而,一般根目录不是个确定的东西,所以需要变量化,所有的php框架几乎都提供这么个变量。

目测不是.ht文件的错误,印象中:当链接对应的文件存在时,是有限返回文件的,当无法通过链接直接访问文件时,才会去匹配相关规则。

初始化文件应该有WEB_ROOT吧 在模板文件中这么写

{WEB_ROOT} / public/css/captain.css 应该就OK了吧

css路径声明的不对,方法1,在里面声明就是基础路径设置,方法2,在引用css时使用绝对路径,如

$baseUrl应该是http://127.0.0.1/capframework/public/

此外,通常为了安全考虑,.htaccess应该是放在public下面的,如果你配置虚拟主机的话也应该指向/capframework/public而不是/capframework,这样能避免暴露其他的代码。当然,index.php也应该处于public下面。

bVtgZJ

楼上正解!!在加载的静态文件路径前加 ' / ' 即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值