我尝试创建一组匹配带有和不带斜杠的网址的规则
大多数答案都指向我使用类似的东西。
location /node/file/ {
rewrite ^/node/file/(.*)/(.*)$ /php/node-file.php?file=$1&name=$2;
rewrite ^/node/file/(.*)/(.*)/?$ /php/node-file.php?file=$1&name=$2; │
}
但这与尾随的斜杠网址不匹配。
如何编写符合
的网址的规则http://example.com/node/file/abcd/1234/
http://example.com/node/file/abcd/1234
答案 0 :(得分:1)
第一个rewrite
语句包含(.*)
作为最后一次捕获,它将匹配任何字符串,包括一个带有斜杠的字符串。
使用字符类[^/]
匹配除/
以外的任何字符:
rewrite ^/node/file/([^/]*)/([^/]*)$ /php/node-file.php?file=$1&name=$2;
rewrite ^/node/file/([^/]*)/([^/]*)/?$ /php/node-file.php?file=$1&name=$2;
现在您将注意到第一个rewrite
语句是不必要的,因为第二个rewrite
语句匹配带有和不带尾随/
的URI。
所以你需要的只是:
rewrite ^/node/file/([^/]*)/([^/]*)/?$ /php/node-file.php?file=$1&name=$2;