我已经看到了一些方法来重写$request_uri
并index.html
在文件系统中存在特定文件时添加它,如下所示:
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
Run Code Online (Sandbox Code Playgroud)
但我想知道相反是否可以实现:
即当有人要求时http://example.com/index.html
,他们会被重定向到http://example.com
因为nginx regexp是perl兼容的,所以我试过这样的事情:
if ( $request_uri ~* "index\.html$" ) {
set $new_uri $request_uri ~* s/index\.html//
rewrite $1 permanent;
}
Run Code Online (Sandbox Code Playgroud)
但这主要是猜测,是否有任何好的文档描述nginx的modrewrite?
我在顶级服务器子句中使用以下重写:
rewrite ^(.*)/index.html$ $1 permanent;
Run Code Online (Sandbox Code Playgroud)
单独使用此功能适用于大多数URL http://foo.com/bar/index.html
,但它会中断http://foo.com/index.html
.要解决此问题,我有以下附加规则:
location = /index.html {
rewrite ^ / permanent;
try_files /index.html =404;
}
Run Code Online (Sandbox Code Playgroud)
=404
找不到文件时,该部件返回404错误.
我不知道为什么单独的第一次重写是不够的.
下面的配置让我重定向/index.html
到/
和/subdir/index.html
到/subdir/
:
# Strip "index.html" (for canonicalization)
if ( $request_uri ~ "/index.html" ) {
rewrite ^(.*)/ $1/ permanent;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22532 次 |
最近记录: |