我正在为我的网站实施一个slu system系统。我计划将无效slug重定向到存储在数据库中的正确的slu。 E.g。
http://example.com/11/wrong-slug
点击数据库,检查11的slug是否错误 - 如果没有做301重定向
http://example.com/11/right-slug
检测301并通知用户他们关注了无效链接
是否可以使用PHP识别301重定向,以便我可以要求用户更新书签等。
谢谢, 杰米。
答案 0 :(得分:5)
或者,您可以将GET参数附加到您的网址(如果您不介意),并在PHP脚本中检查它。类似的东西:
http://example.com/11/right-slug?corrected-from=http://example.com/11/wrong-slug
在同一个笔记中,您可以使用会话或cookie,但您必须在检测后将其删除。
答案 1 :(得分:2)
我想到了几种解决方案:
您可以尝试使用get_headers() 啊不,它会向URL发送请求,这不是您想要的
由于您正在重定向并测试来自同一台计算机的重定向,因此您只需将有关错误slug的消息写入用户会话,并在下次呈现视图模板时显示该消息。许多框架都有一个 flash messenger 组件,可以让您轻松完成,例如使用Zend Framework,您可以在控制器操作中使用以下代码
$ flashMessenger = $ this-> _helper-> getHelper('FlashMessenger'); $ flashMessenger-> addMessage('我们在最后一次请求中做了一些事情');
不是在找到错误的slug时立即重定向,而是渲染一个View模板,告诉用户错误的slug,然后使用模板中的meta或javascript重定向。或者,您还可以使用正确的slug将纯链接写入模板。
最后,您还可以通过header()将自定义标头注入重定向,然后可以从您的脚本中读取。 也无效,因为一旦浏览器从服务器获得重定向,它们就会丢失
答案 2 :(得分:1)
解决方案可能是检查“新”页面中的$_SERVER['HTTP_REFERER']
:如果已设置并且对应于“旧”页面,则可能是因为您的用户已被重定向 - 这意味着您可能需要显示你的信息。
但请注意,Referer是由用户的浏览器发送的,可以被禁用或伪造 - 因此可以使用它来增强体验,但是你不能依赖它来做任何关键的事情。
答案 3 :(得分:0)
找到了一个有效的解决方案:
检查会话,如果$ _SESSION ['INVALID_SLUG']存在,则显示消息,然后取消设置会话
否则
有任何反馈意见吗? 我意识到这不会检测到301重定向本身更多地检测到与重定向相关的触发器。
感谢您的帮助。
答案 4 :(得分:0)
我认为唯一有用的选择是使用cookie。
当请求具有错误slug的URL时,为该URL设置一个cookie而不使用slug:
$path = substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/')+1);
setcookie('wrong-slug', 1, 0, $path);
然后测试是否存在这样的cookie并显示您的消息:
if (isset($_COOKIE['wrong-slug'])) {
echo 'The location of this resource has changed. Please update your bookmarks.';
}