nginx将URL重写为小写的url

我有nginx设置,但是我需要解决一个问题,有人input“/ Home”来:

  • 把它重写成小写的“/ home”(对所有文件和目录,不只是在家里),而是find大写(如果有的话)文件。
  • 还是需要添加另一个使用不区分大小写的字符“〜*”的位置?

实际的目录和文件布局确实包含混合的大写和小写字符。 为了简单起见,我想保留这个,例如/ Home和/ About是实际的目录,但是对于SEO,我想永久redirect到小写/ home,但是find实际的/ Home目录。

我不确定这是否可以通过重写规则来完成,或者是否在“位置/ {}”或某个组合上不区分大小写。

location / { try_files $uri $uri/ /Home; } 

注意:我不是在寻找属于Nginx陷阱的答案, 包括邪恶的Ifs 。

正如在你的问题的评论中所提到的,这可以通过使用Perl模块。 假设你将使用$uri_lowercase你可以这样写:

 location / { try_files $uri $uri/ $uri_lowercase $uri_lowercase/ =404; } 

不过要注意的是,如果你有像/Home/UseR/teSt.html这样的/Home/UseR/teSt.html混合的URL,$ uri_lowercase可能不适合你的需求,你需要尝试所有的部分小写的uri。 如果这是你的情况,我强烈build议你的目录得到一些政策,并要求他们是小写。