使用 nginx 从 URL 中删除 php/html 扩展名和尾随斜杠

使用 nginx 从 URL 中删除 php/html 扩展名和尾随斜杠

我需要删除.php.html扩展名和 URL 中的尾部斜杠,而不会影响对现有目录的访问。

我当前正在使用以下 nginx 配置:

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

index index.php index.html;
location ~ / {
    rewrite ^/([0-9]+)/([^/]+)$ /event.php?id=$1&title=$2 last;
    try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
}

location ~ \.php$ {
    try_files $uri =404;
}

它可以工作,但我无法访问现有文件夹(这是预期行为,因为以斜线结尾会产生无限重定向)。我尝试用以下方法修复它,try_files但没有奏效:

location / {
    try_files $uri $uri/ @notexists;
}
location @notexists {
    rewrite ^/(.*)/$ /$1 permanent;
    rewrite ^/([0-9]+)/([^/]+)$ /event.php?id=$1&title=$2 last;
    try_files $uri $uri/ $uri.html $uri.php$is_args$query_string;
}

顺便说一句,我想知道如何优化代码以提高效率。我是 Nginx 新手...

相关内容