Linux
用於多級子目錄的 Ngnix 重定向
我有如下結構的 URL:
xyz/asset.html abc/test.html xyz/abc/test.html xyz/abc/qwerty/test2.html
我想重定向:
xyz/asset.html to xyz/asset
xyz/abc/test.html to xyz/abc/test
xyz/abc/qwerty/test2.html to xyz/abc/qwerty/test2
目前我在我的 ngnix 配置中有這個重定向規則,它適用於第一級目錄重定向:
location ~ ^/(xyz|abc).html { return 301 /$1; }
這適用於第一級直接但不適用於子目錄。如何做到這一點?謝謝您的幫助。
有多種方法可以解決這個問題。這是一種這樣的方式…
第一步是擷取需要重寫的 URI 部分。然後,我們可以使用
location
塊或使用rewrite
條件進行重定向。使用
location
塊named capture
…location ~ ^/(?<variable>[/a-zA-Z0-9]+)\.html$ { return 301 /$variable; }
或者
location ~ ^/([/a-zA-Z0-9]+)\.html$ { return 301 /$1; }
使用
rewrite
…rewrite ^/(?'custom_url'[/a-zA-Z0-9]+)\.html$ /$custom_url permanent;
Nginx 支持
named captures
使用以下語法:?<name> Perl 5.10 compatible syntax, supported since PCRE-7.0 ?'name' Perl 5.10 compatible syntax, supported since PCRE-7.0 ?P<name> Python compatible syntax, supported since PCRE-4.0
參考:https ://nginx.org/en/docs/http/server_names.html (在標題正則表達式名稱下)。