这次我使用如下方式来返回前端首页的数据,而且已经做了跨域处理, 别的路由都可以正常返回,但是就是首页无法正常返回数据,产生了跨域问题。
我肯定怀疑是nginx的问题,我这里使用的是phpstudy8
然后我换回apache,发现可以返回数据,只要使用了如下伪静态,不会产生跨域问题
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>
原本框架是没有这两行的
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
如果不加这两行,apache也会产生跨域问题,但是apache它是首页正常,别的页面会产生跨域问题,我无语了都。
然后我想了半天会不会是 nginx 在访问首页接口的时候没有获取到HTTP_AUTHORIZATION 请求头导致的?
我甚至都到stackoverflow 上提问,
有热心的大牛回答了我的问题
意思是 php作为cgi运行的时候呢,一般nginx是不用关心请求头问题的。 于是我想到了是不是伪静态转换出问题了,原本我的伪静态是网上百度的thinkphp nginx伪静态 结果千篇一律都是这个
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
就是这个玩意把我害死了哈,于是我参考着框架自带的public/.htaccess文件
改造后
if (!-f $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
if (!-d $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
这两条一加上,整个世界都通顺了,这个问题把我卡了两天啊,记录一下,用于纪念我逝去的2天青春
|