Thinkphp 6.0路由的域名和跨域请求

Posted 龙华军

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thinkphp 6.0路由的域名和跨域请求相关的知识,希望对你有一定的参考价值。

本节课我们来学习一下路由的域名操作和跨域请求问题;


一.域名路由


1. 要使用域名路由,首先,在本地我们需要通过 hosts 文件来映射;
2. 打开 C:\\Windows\\System32\\drivers\\etc 找到 hosts 文件;
3. 在末尾添加一句:127.0.0.1 news.abc.com 映射二级域名;
4. 此时,我们访问 news.abc.com 就直接映射到 localhost 里了;
5. 如果想访问 thinkphp 独立的服务器,开启后,直接:8080 即可;
http://news.abc.com:8000
6. 如果想限定在 news.abc.com 这个域名下才有效,通过域名路由闭包的形式;

Route::domain('news', function () 
Route::rule('details/:id', 'Address/details');
);


7. 除了二级(子)域名的开头部分,也可以设置完整域名;

Route::domain('news.abc.com', function () 
Route::rule('details/:id', 'Address/details');
);


8. 支持多个二级(子)域名开头部分,使用相同的路有规则;

Route::domain(['news', 'blog', 'live'], function () 
Route::rule('details/:id', 'Address/details');
);


12. 可以作为方法,进行二级(子)域名开头部分的检测,或完整域名检测;

Route::rule('details/:id', 'Address/details')->domain('news');
Route::rule('details/:id', 'Address/details')->domain('news.abc.com');


13. 路由域名也支持:ext、pattern、append 等路由参数方法的操作;


二.跨域请求


1. 当不同域名进行跨域请求的时候,由于浏览器的安全限制,会被拦截;
2. 所以,为了解除这个限制,我们通过路由 allowCrossDomain()来实现;

Route::rule('details/:id', 'Address/details')->allowCrossDomain();


3. 实现跨域比如没有实现的 header 头文件多了几条开头为 Access 的信息;
4. 此时,这个页面,就可以支持跨域请求的操纵了;
5. 我们创建一个不同端口号或不同域名的 ajax 按钮,点击获取这个路由页面信息;
6. 如果,没有开启跨域请求,则会爆出提醒:
已拦截跨源请求:同源策略禁止读取位于 http://localhost:8000/details/5.html 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')
7. 开启后,即正常获取得到的数据;
8. 如果你想限制跨域请求的域名,则可以增加一条参数;
 

Route::rule('col/:id', 'Collect/read')
->allowCrossDomain([
'Access-Control-Allow-Origin' => 'http://news.abc.com:8000'
]
);

thinkphp 验证码怎么输出

thinkphp 3.1版本输出验证码 

Public function verify()
    import('ORG.Util.Image');
    Image::buildImageVerify();

//调用verify方法就可以输出验证码

thinkPHP3.2版本输出验证码

$Verify = new \\Think\\Verify();
$Verify->entry();

thinkPHP 5.0版本输出验证码

//验证码配置
//然后在应用配置文件中添加验证码的配置参数
'captcha'  => [
        // 验证码字符集合
        'codeSet'  => '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRTUVWXY', 
        // 验证码字体大小(px)
        'fontSize' => 25, 
        // 是否画混淆曲线
        'useCurve' => true, 
         // 验证码图片高度
        'imageH'   => 30,
        // 验证码图片宽度
        'imageW'   => 100, 
        // 验证码位数
        'length'   => 5, 
        // 验证成功后是否重置        
        'reset'    => true
],
//并且确保开启了URL路由。
//验证码显示
<div>:captcha_img()</div>
//或者
<div><img src=":captcha_src()" alt="captcha" /></div>
//上面两种的最终效果是一样的,根据需要调用即可。
//控制器验证
//使用TP5的内置验证功能,添加captcha验证规则即可
$this->validate($data,[
    'captcha|验证码'=>'require|captcha'
]);
//或者手动验证
if(!captcha_check($captcha))
 //验证失败
;

参考技术A 直接用echo输出不就好了?

以上是关于Thinkphp 6.0路由的域名和跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

同源策略和跨域-总结

同源和跨域

同源和跨域问题及解决方案

同源和跨域问题及解决方案

同源策略与跨域问题解决

浏览器的同源策略和跨域问题