# 偽靜態/跨域
文檔最后更新時間: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 生成海報需要下載圖片,這里仍然需要配置靜態資源跨域**

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 行
如果您有奇奇怪怪的部署模式或問題,歡迎告知我們來幫您解決~