CakePHP 3:生成缩短的URL(规范)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了CakePHP 3:生成缩短的URL(规范),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1588字,纯文字阅读大概需要3分钟。
内容图文
![CakePHP 3:生成缩短的URL(规范)](/upload/InfoBanner/zyjiaocheng/682/4115ce7c8bc643cfbdcfafa9beca3880.jpg)
我正在尝试防止重复的内容.
我的帖子原始网址是这样的:
domain.com/post/52-quick-brown-fox-jumps-over-lazy-dog
我想生成一个缩短的网址,并使用它们共享,例如twitter
domain.com/p/52 —-> redirects to —> original url
怎么办呢?通过htaccess 301重定向?通过CakePHP路由?
谢谢!
解决方法:
重定向本身应该是301(永久移动),因此所有指向短网址的链接都映射到了Google索引中的长网址.
Router类具有自己的重定向方法.您基本上可以复制您的实际路线,用重定向替换connect并更改url模式以匹配您的短url:
$routes->redirect('/p/:id', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id'],
'status' => 301,
'persist' => true
]);
$routes->connect('/post/:id-:slug', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id', 'slug']
]);
唯一的缺点:据我所知,您将无法从Router类生成短网址,因为它将始终根据传递的参数生成长网址.您将必须根据ID手动生成它们.
确保Controller检查是否存在正确的子段,如果没有,则执行重定向到正确的URL.您可以使用Controllers redirect() method.
public function display($id, $slug = null) {
$post = $this->Posts->findById($id);
if($post) {
if($post->slug !== $slug) {
return $this->redirect('/post/' . urlencode($id . '-' . $slug), 301);
}
//Other stuff
} else {
$this->Flash->error('The post was not found.');
return $this->redirect('/posts');
}
}
如果要避免双重重定向,则可能要使用connect而不是redirect(感谢该注释的ndm):
$routes->connect('/p/:id', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id'],
'status' => 301
]);
$routes->connect('/post/:id-:slug', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id', 'slug']
]);
如果该段错误或不存在,则Controller仍应重定向到正确的URL.
内容总结
以上是互联网集市为您收集整理的CakePHP 3:生成缩短的URL(规范)全部内容,希望文章能够帮你解决CakePHP 3:生成缩短的URL(规范)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。