Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Nginx的规范URL_Nginx_Seo_Rewrite_Config_Canonical Link - Fatal编程技术网

使用Nginx的规范URL

使用Nginx的规范URL,nginx,seo,rewrite,config,canonical-link,Nginx,Seo,Rewrite,Config,Canonical Link,我们正在努力从我们的URL中删除目录索引文件,以清理这些内容,并提供更多的一致性来改进我们的SEO 但是,我不熟悉如何在Nginx中处理这个问题 我为Apache找到了以下内容(我们只是在寻找与Nginx等价的产品) 我已经阅读了文档并尝试了几个不同的选项-我能得到的最接近的选项仍然会返回无限循环错误。您为Apache发布的代码片段使用不可变的全局变量%{the_REQUEST}来确定客户端请求的原始URI。但是,此变量包含整个请求,包括HTTP方法、版本和查询字符串。因此,解析这个变量有点混乱

我们正在努力从我们的URL中删除目录索引文件,以清理这些内容,并提供更多的一致性来改进我们的SEO

但是,我不熟悉如何在Nginx中处理这个问题

我为Apache找到了以下内容(我们只是在寻找与Nginx等价的产品)


我已经阅读了文档并尝试了几个不同的选项-我能得到的最接近的选项仍然会返回无限循环错误。

您为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
  • 发出404错误

  • 反应很好。欢迎来到堆栈溢出!
    ## Rewrite internal requests for foo/bar to foo/bar.html
    try_files $uri $uri.html =404;