基于Windows和Apache,使用 Yaf 框架(自带路由)开发时 Apache 开启了伪静态导致无法加载静态资源、接收不到参数,原因是问号后的参数被当着整串字符串了(有些日子了,应该是这个原因)无法解析参数,解决方法:
#启用重写后,避免静态资源访问出错
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/css
RewriteCond %{REQUEST_URI} !^/js
RewriteCond %{REQUEST_URI} !^/images
RewriteCond %{REQUEST_URI} !^.*(\.css|\.js|\.gif|\.png|\.jpg|\.jpeg|\.xml)
#解决重写后接不到问号后面的参数
RewriteCond %{QUERY_STRING} ^(.*)$
#RewriteRule ^(\w+)\-(\w+)\.html index.php?c=$1&a=$2%1 [L,QSA]
#把URL中的index.php省略掉
RewriteRule ^/(.*) /index.php?$1 [L,QSA]
在 Apache 的配置文件或对应的 httpd-vhosts.conf 里加入上面一段。
其中最主要的是 [QSA,L] 中 QSA(query string append),参见 Apache 文档中 mod_rewrite 模块