首页 文章

正则表达式nginx删除尾部斜杠不适用于2个文件夹?

提问于
浏览
0

我们希望nginx永久重定向url,并使用斜杠到非斜杠网址 . 我们发现:https://www.scalescale.com/tips/nginx/nginx-remove-trailing-slash/

所以我们把:

rewrite ^/(.*)/$ /$ permanent;

在nginx中,问题是它一定不适用于某些文件夹 . 所以我们发现:remove trailing slash in nginx with some certain cases ignored

我们将其改为:

rewrite ^/(?!admin)(.*)/$ /$ permanent;

但是服务器无法启动:

invalid number of arguments in "rewrite" directive in /opt/www/folder/.nginx:5

而且:我们想要排除2个文件夹 . 从重写规则中排除文件夹的正确正则表达式是什么?

谢谢,

巴特

编辑谷歌来这里的人:

答案是有效的...唯一奇怪的是标准在没有1美元的情况下工作:

rewrite ^/(.*)/$ /$ permanent;

现在我们进行了排除,如果没有$ 1,它就不再起作用....但是现在这个有效:

# remove trailing slashes
rewrite ^/(?!folder1|folder2)(.*)/$ /$1 permanent;

1 回答

  • 1

    我怀疑这只是一个错字 . /$ 看起来应该是 /$1

    rewrite ^/(?!admin)(.*)/$ /$1 permanent;
    

    如果您有多个要排除的URI,请尝试类似的方法

    rewrite ^/(?!admin|secure|raw)(.*)/$ /$1 permanent;
    

    nginx 使用与Perl相同的正则表达式库,因此您可以从命令行测试这些东西

    perl -ple 's#^/(?!admin|secure|raw)(.*)/$#/$1#'
    

    并只输入示例URI .

相关问题