1. nginx隐藏html后缀
nginx配置文件中添加以下代码
1 | location / { |
html中将链接结尾的.html
去除,否则还会显示后缀,或者说根本不会触发这条函数
1.1. 这里详细解释下
这里使用了if
指令,让Nginx对$request_uri
这个传入部分使用一个正则表达式,正则表达式检查URI链接是否有.html
扩展名,没有就将URI的那部分存储在本地变量$1
中,这个正则表达式同时会检测链接是否有.html
的后缀,如果有就删除,最后再存到本地变量$1
中并进行302跳转,$args
保留参数比如请求的index.html?lang=en
转换成了index?lang=en
而不只是请求index
,到这里就基本结束了
1.2. index
指定index文件的,没什么好说的吧
1.3. 那后面的try_files
又有什么用呢?
如果没有try_files
,Nginx将不知道如何处理新的无后缀uri(原来的后缀已经删了),它会对链接进行一个尝试,比如我们这里有个en
,它会先找有没有/en
这个文件,如果没有就找有没有en.html
这个文件,如果没有就去到/en/
找index.html
如果没有,最后返回404,如果没有这行代码那随便输个链接,可能就给你跳500了(500是指服务器内部错误)这行代码就能让你正常跳转到404
1.4. 详细讲下前面的正则表达式~ ^/(.*)\.html$
分开来写^
: 表示行首。/
: 逐字匹配字符/
,Nginx中不需要转义正斜杠。(.*)
: 抓取部分:无限次匹配任何字符\.
: 匹配字符.
,反斜杠转义html
: 从字面上匹配字符串html
$
: 表示行尾(.*)
包含了链接的非.html
前半部分,之后用$1
变量引用了,为了方便查找文件,这里又添加了.html
后缀来匹配文件(原链接是没有.html
后缀的)
1.5. 另外
代码中的302
跳转是可以改成301
的
如果搜索引擎已经收录了带有.html
后缀的网页后想要去除的话建议使用301
跳转