我想从URL重定向,此处存在真实页面-mysite.com/folder/index.html:
这是我的配置的一部分
server_name k.my.net www.k.my.net;
index index.html;
root /var/www/demo/k.my.net/current/public;
rewrite ^(.*/)index\.html$ $1;
rewrite ^(/.+)\.html$ $1/;
location / {
try_files $uri $uri/ =404;
}
也可以尝试使用:
location / {
try_files $uri $uri/ @htmlext;
}
location ~ \.html$ {
try_files $uri =404;
}
location @htmlext {
rewrite ^(.*)$ $1.html permanent;
}
第三个解决方案ERROR_LOOP
location ~* ^/([a-zA-Z1-9_-]*/)index\.html$ {
return 301 $1;
}
location ~* ^/([a-zA-Z1-9_-]*/?[1-9a-zA-Z_-]*)\.html$ {
return 301 /$1/;
}
location ~* ^/([a-zA-Z1-9_-]*/?[a-zA-Z1-9_-]*)/$ {
try_files /$1.html /$1/index.html =404;
}
答案 0 :(得分:0)
您可以使用正则表达式location
提取尾随/
之前的URI部分,并使用try_files
测试这两种选择。有关详细信息,请参见this document。
例如:
location ~ ^(.*)/$ {
try_files $1/index.html $1.html =404;
}
location
也与/
相匹配,这将满足您的第三个要求。
您的rewrite
语句应该是安全的,但是如果它们引起重定向循环,则可能需要用if
块替换它们并在$request_uri
中测试原始请求。例如:
if ($request_uri ~ ^([^?]*?)(/index|)(\.html)(\?.*)?$) {
return 301 $1/$4;
}