需求描述

在网站example.com的根目录中,存在以下文件及文件夹,比如./img, ./js, ./index.php等。现需求在目录路径中存在的,则直接访问;不存在的,则跳转到其它URL。

解决方法

目前网上大部份教程中提到的 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 这一条是错误的,如果在location中定写入含有!符号的配置,则保存的时候会报
nginx: [emerg] invalid location modifier "!~" in /opt/nginx/conf/dirconf/example.com.conf
nginx: configuration file /opt/nginx/conf/nginx.conf test failed

这种错误。
"!~"这种写法只适用于if语句中,不能直接用在location配置中。下面给出使用if嵌套实现的例子。

set $rewrite_yes "n";
if ($request_uri !~ "(/img|/js|/index)") {set $rewrite_yes "y";}
if ($host ~ "example.com") {
set $host_name "test.example.com";
set $rewrite_yes 1$rewrite_yes;
}
if ($rewrite_yes = "1y"){rewrite ^/(\w+)(/)?$ https://$host_name/$1  break;}

参考:
https://zhuanlan.zhihu.com/p/425754211

Last modification:January 19, 2023
If you think my article is useful to you, please feel free to appreciate