Heim  >  Fragen und Antworten  >  Hauptteil

Nachdem die Symfony-Installation abgeschlossen ist, rufen Sie die Homepage auf, der CSS-Stil wird jedoch nicht gerendert.

Effektanzeige

PHP中文网PHP中文网2713 Tage vor619

Antworte allen(4)Ich werde antworten

  • 習慣沉默

    習慣沉默2017-05-16 16:46:32

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

    Antwort
    0
  • 漂亮男人

    漂亮男人2017-05-16 16:46:32

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

    包括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;

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

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-05-16 16:46:32

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

    Antwort
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-16 16:46:32

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

    app/console assets:install web
    

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

    希望能帮到你。

    Antwort
    0
  • StornierenAntwort