220天前2020-03-20 16:58:33 |    抢沙发  331 
最近公司招聘了一个SEO然后新做的站点完全按照SEO的要求来处理,细节还挺多,其中一个就是要保证url的唯一性,主要体现在带/和不带/的问题,在以前的开发中重来没关注过这些,而且SEO理解路径和开发还是后很大的出入的,甚至有些在程序看来完全是错误的。本文就是为了解决这个url唯一性问题而写的,本人对lua不太熟悉,所以折腾了2-3个小时。

nginx+lua

在SEO优化中有一条非常重要的条件就是要保证url的唯一性,就是的解决方案是使用nginx+lua来实现的,原理很简单,当有入站请求时,nginx先把请求交给lua脚本进行处理,然后脚本对url进行匹配,把不符合条件筛选出来然后进行更正后进行301.

这里说一下我的需求吧。

1,排除css,js,图片等资源请求url 因为我的这些静态资源都放在public目录下的所以直接排除这个目录就好了;

2,凡是url后缀以/和.html结尾的一律保持原有url;

3,对带有get参数的url保持原有url不变;

4,对不满足上面要求的进行尾部添加/


nginx配置:

虚拟主机配置文件中在location段中添加:

rewrite_by_lua_file conf/lua/formatting_url.lua;
PS:文件名称和路径根据你自己的习惯修改都是可以的。

formatting_url.lua配置文件内容:

local scheme = ngx.var.scheme;
local server_addr = ngx.var.server_name;
local request_uri = ngx.var.request_uri;
-- ngx.header.content_type = "text/plain;charset=utf-8"
-- ngx.say(request_uri:match("^/public/"));
-- ngx.say(scheme..'://'..server_addr..request_uri);

if(request_uri:match("/$"))
  then
    return '';
elseif(request_uri:match("%.html$"))
  then
    return '';
elseif(request_uri:match("^/public/"))
  then
    return '';
elseif(request_uri:match("?"))
  then
    return '';
else
  return ngx.redirect(scheme..'://'..server_addr..request_uri..'/');
end
PS:其中--部分为注释掉的内容,可以不写,这个是我调试的时候使用的。

发表评论

暂无评论

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享