4 个回答

应该是css文件不存在引起的,看看目下是否有css资源

不得不说你们这些程序员。。。

包括symfony,wiki系统在内的各种系统,
外加wordpress,inews等等能把地址写成/index.php/M/V/C 这种类型的,或者写成 /M/V/C.html 这种类型的,
有些情况下不显示CSS是很正常的,而且出现的原因,从前端来看,99%都是找不到CSS。
wordpress用google的字体导致页面半天不显示是另外一个话题了。

从后台来说,有些系统如会提供解决方案,例如CI,写成/index.php/M/V/C 这种类型会找的到CSS,这个就是CI自己比较良心。(可能有,头几天瞅了一下CI的手册,模糊的记得有这个实现。)也有很多别的东西会给实现,不是仅仅CI给实现了。
实现原理就是/index.php/css/template.css 他会把/css/template.css当成参数传给index.php,然后用php给读出来。

有些东西就比较坑了,
他自己要用重写但是index.php又不提供这种方式,也就直接导致/index.php/css/template.css ,传进去的参数不工作,直接导致不显示CSS。
例如:mediawiki,头几天有个人新装了mediawiki,但是没搞rewrite,他就不会给显示出来。

有些服务器软件例如nginx,有些情况下默认把参数传进去,
例如访问www.test.com/M/V/C,nginx会解析成www.test.com/index.php/M/V/C,遇到那些良心的就会显示。
当然有些就傻乎乎的去找服务器目录的M/V/C目录,当然403/404。

以上说了那么多,
看不懂的话,你就当我在自说自话,下面是重点,从深层次解析这个问题。

重点在于:

重写机制,或者叫做rewrite。
一般写php的都会有经验,网站肯定会带一大波参数,例如www.bbs.com/forum.php?mod=forumdisplay&fid=25

但是有些php站点就不带,例如你访问discuz,http://www.discuz.net/forum-10-1.html 这个示例页面,网站根目录肯定不会有forum-10-1.html这个文件了,因为第一是根目录有写权限可能会不安全,第二是这个文件需要实时更新,也就是说相当于回到了以前用文本文件当成数据库的时代,硬盘压力大而且坏得快。

当然了这个文件不存在要怎么办啊?

当然这个时候服务器软件nginx/lighttpd/apache就有作用了。
apache最简单,一般的系统会有.htaccess文件给你,你把这个文件往网站根目录一丢就行。
nginx据说也能用.htaccess文件,但是我没用过,都是手动配置。
lighttpd必须要手动配置。

现在你访问这个文件,
例如老板娘nginx,收到了这个请求,肯定对外说哎呀哎呀,来的都是客,别忙活了先坐会吧,马上给你上茶,然后马上叫伙计去准备。
伙计一看老板娘要上茶,然后就去准备茶叶和开水。
这里的伙计自然就是nginx的rewrite模块。
nginx的模块的写法:(这里是重写http://www.discuz.net/thread-998595-1-1.html这个页面的)

rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&extra=page%3D$3&page=$2 last;

上面一行代码的作用是,
凡是http://www.discuz.net/thread-998595-1-1.html这种类型的网址,直接给转换成www.discuz.net/viewthread.php?tid=998595&extra=page%3D1&page=1这种形式。
当然这行代码有点老,新的discuz已经不用这种rewrite规则了。你访问这个页面如果是404那不代表我说的错了。

类似的规则的htaccess的写法如下:(这里是重写http://www.discuz.net/forum-10-1.html这个页面的)

RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3&%1

话说回来,
你这种问题出现的原因是,
CSS文件被当成参数传进app_dev.php这里面了,自然就找不到css了。

具体解决方法也一并给你:
第一:百度 symfony rewrite app_dev.php
第二:重写机制依赖正则表达式。无论哪个服务器软件都逃不了。
三是分钟学会正则表达式地址:http://www.jb51.net/tools/zhengze.html

http://symfony.cn/articles/symfony2-nginx-configuration.html
请仔细参悟这一行: rewrite ^/app.php/?(.*)$ /$1 permanent;

顺带:毕业生求实习岗位。

同楼上的 用虚拟主机 不要直接访问 入口文件

用命令行进入到项目根目录,运行:

app/console assets:install web

回到浏览器刷新一下,应该就看到了。原因是安装完成之后缺少了css等资源文件的安装(Windows下可能这样吧,我没用Windows玩过sf2),上面的命令会把sf2默认的demo Bundle中的资源文件安装到web/bundles目录下。

希望能帮到你。

宣传栏