企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
# 伪静态/跨域 文档最后更新时间:2021-07-12 14:43:02 ### 伪静态跨域配置 #### 为什么配置伪静态? 1.伪静态通过URL重写隐藏应用的入口文件index.php和实际路径,会减少些许安全问题。 2.配置伪静态重写URL后,可以使得URL链接更加优美,否则会有太多的\[/&?\]等带参字符,使得路径凌乱,在拼接一些跳转逻辑时也会很繁琐。 #### 为什么配置跨域? [为什么给你设置重重障碍?讲一讲Web开发中的跨域](https://zhuanlan.zhihu.com/p/39466226) 跨域问题可以在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 生成海报需要下载图片,这里仍然需要配置静态资源跨域** ![](https://img.kancloud.cn/a8/b5/a8b5a6c2b84d6b17d0ea7477d0038208_1100x497.png) nginx 配置代码 ~~~ location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { #允许静态资源跨域请求 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, token, platform'; expires 30d; access_log off; } ~~~ * * * ### 分割线(下面全是 apache 的配置) * * * ### apache 伪静态/跨域配置 > 版本必须大于等于 V1.2.0.20201001\_beta 因为 apache 无法单独配置图片跨域,并且 fastadmin 自带的跨域又无法解决生成海报时图片跨域的问题,所以这里采用 apache 配置跨域方式,并且移除 fastadmin 自带的跨域 #### 配置伪静态/跨域 ~~~ <IfModule mod_headers.c> Header always add Access-Control-Allow-Origin: "*" Header always add Access-Control-Allow-Methods: "GET,POST,PUT,DELETE,HEAD,OPTIONS" Header always add Access-Control-Max-Age: "1000" Header always add Access-Control-Allow-Credentials: "true" Header always add Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept, token, platform" </IfModule> <IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L] RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L] </IfModule> ~~~ #### 【只有 apache 才需要移除】移除 fastadmin 程序中的跨域【重要】 找到 application/common/controller/Api.php \_initialize 方法 将 \_initialize 方法中的 check\_cors\_request(); 方法注释掉,大约在 96 行 如果您有奇奇怪怪的部署模式或问题,欢迎告知我们来帮您解决~