伪静态/跨域

伪静态跨域配置

为什么配置伪静态?

1.伪静态通过URL重写隐藏应用的入口文件index.php和实际路径,会减少些许安全问题。
2.配置伪静态重写URL后,可以使得URL链接更加优美,否则会有太多的[/&?]等带参字符,使得路径凌乱,在拼接一些跳转逻辑时也会很繁琐。

为什么配置跨域?

跨域问题可以在PHP代码或Nginx/Apache中解决,在这里我们统一使用HTTP Server的配置来解决。

在PHP代码中无法解决一些静态资源的跨域问题,例如我们的海报生成是在前端使用Canvas组合绘制的,如果只在PHP代码中加入header跨域设置,图片这些静态资源是不走PHP的响应层的,Canvas下载这些图片资源也会提醒跨域问题导致图片无法组合。

nginx 伪静态/跨域配置

版本必须大于等于 V1.2.0.20201001_beta

配置跨域配置跨域

修改配置文件 /application/config.php 文件 fastadmin 配置项下的选项 cors_request_domain(如果没有,请自行在 fastadmin 配置项下面自行添加)

//允许跨域的域名,多个以,分隔 ‘cors_request_domain’ => ‘localhost,127.0.0.1,您的 h5 域名(无需携带http和端口号)’ //如果暂时无法确认您的跨域域名 可简单使用通配符来囊括所有域名 ‘cors_request_domain’ => ‘*’

配置伪静态/图片跨域

因为前端 h5 生成海报需要下载图片,这里仍然需要配置静态资源跨域 伪静态/跨域 - 图1

nginx 配置代码

  1. location / {
  2. if (!-e $request_filename){
  3. rewrite ^(.*)$ /index.php?s=$1 last; break;
  4. }
  5. }
  6. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
  7. #允许静态资源跨域请求
  8. add_header 'Access-Control-Allow-Origin' '*';
  9. add_header 'Access-Control-Allow-Credentials' 'true';
  10. add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
  11. add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, token, platform';
  12. expires 30d;
  13. access_log off;
  14. }

分割线(下面全是 apache 的配置)


apache 伪静态/跨域配置

版本必须大于等于 V1.2.0.20201001_beta

因为 apache 无法单独配置图片跨域,并且 fastadmin 自带的跨域又无法解决生成海报时图片跨域的问题,所以这里采用 apache 配置跨域方式,并且移除 fastadmin 自带的跨域

配置伪静态/跨域

  1. <IfModule mod_headers.c>
  2. Header always add Access-Control-Allow-Origin: "*"
  3. Header always add Access-Control-Allow-Methods: "GET,POST,PUT,DELETE,HEAD,OPTIONS"
  4. Header always add Access-Control-Max-Age: "1000"
  5. Header always add Access-Control-Allow-Credentials: "true"
  6. Header always add Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept, token, platform"
  7. </IfModule>
  8. <IfModule mod_rewrite.c>
  9. RewriteEngine on
  10. RewriteBase /
  11. RewriteCond %{REQUEST_FILENAME} !-d
  12. RewriteCond %{REQUEST_FILENAME} !-f
  13. RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]
  14. RewriteCond %{REQUEST_METHOD} OPTIONS
  15. RewriteRule ^(.*)$ $1 [R=200,L]
  16. </IfModule>

【只有 apache 才需要移除】移除 fastadmin 程序中的跨域【重要】

找到 application/common/controller/Api.php _initialize 方法

将 _initialize 方法中的 check_cors_request(); 方法注释掉,大约在 96 行