使用Nginx的规范URL
我们正在努力从我们的URL中删除目录索引文件,以清理这些内容,并提供更多的一致性来改进我们的SEO 但是,我不熟悉如何在Nginx中处理这个问题 我为Apache找到了以下内容(我们只是在寻找与Nginx等价的产品)使用Nginx的规范URL,nginx,seo,rewrite,config,canonical-link,Nginx,Seo,Rewrite,Config,Canonical Link,我们正在努力从我们的URL中删除目录索引文件,以清理这些内容,并提供更多的一致性来改进我们的SEO 但是,我不熟悉如何在Nginx中处理这个问题 我为Apache找到了以下内容(我们只是在寻找与Nginx等价的产品) 我已经阅读了文档并尝试了几个不同的选项-我能得到的最接近的选项仍然会返回无限循环错误。您为Apache发布的代码片段使用不可变的全局变量%{the_REQUEST}来确定客户端请求的原始URI。但是,此变量包含整个请求,包括HTTP方法、版本和查询字符串。因此,解析这个变量有点混乱
我已经阅读了文档并尝试了几个不同的选项-我能得到的最接近的选项仍然会返回无限循环错误。您为Apache发布的代码片段使用不可变的全局变量
%{the_REQUEST}
来确定客户端请求的原始URI。但是,此变量包含整个请求,包括HTTP方法、版本和查询字符串。因此,解析这个变量有点混乱,如您发布的示例所示
但是,nginx
有一个专用变量,用于保存从客户端接收的原始请求URI:$request\u URI
。这允许您执行以下操作:
## REDIRECT foo/index(.html) to foo/
if ($request_uri ~ ^(.*/)index(?:\.html)?$) {
return 301 $1;
}
如果还想去掉文件后缀,例如.html
,可以使用以下代码段:
## REDIRECT foo/bar.html to foo/bar
if ($request_uri ~ ^(.+)\.html$) {
return 301 $1;
}
现在,为了使nginx
仍然能够提供正确的文件,可以使用try\u files
指令,该指令按顺序检查所有给定的URI,直到一个URI匹配:
## Rewrite internal requests for foo/bar to foo/bar.html
try_files $uri $uri.html =404;
因此,对/foo/bar
的请求将按如下方式处理:
$uri
=/foo/bar
根,否则$uri.html
=/foo/bar.html
,如果它存在,则返回finally反应很好。欢迎来到堆栈溢出!
## Rewrite internal requests for foo/bar to foo/bar.html
try_files $uri $uri.html =404;