我在根目錄下有多個動態 url,需要撰寫如下。例如
https://mv.test/review/4
https://mv.test/investment-banker/banking-products--004
第一個 url /Reviews/作業得很好,但第二個 url 將轉到 404 頁。我不明白為什么它不起作用。
位置塊
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
location /review/ {
rewrite "^/review/([0-9] )$" /review.php?id=$1 last;
}
location /store/ {
rewrite "^/(.*)/(.*)$" /store.php?store_type=$1&store_owner=$2 last;
}
uj5u.com熱心網友回復:
顯然https://example.com/investment-banker/banking-products--004不匹配location /store/,則其將被默認的處理location是location /。
你想重寫https://foo/bar以/store.php?store_type=foo&store_owner=bar任何富/條不匹配已經由服務器處理的另一個合法的URI。
此時location @extensionless-php塊會盲目地將URL重寫/foo/bar.php為PHP檔案是否存在。
這可以通過if塊來改進。
例如:
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
}
location @extensionless-php {
if (-f $document_root$uri.php) {
rewrite ^(.*)$ $1.php last;
}
rewrite ^/([^/] )/([^/] )$ /store.php?store_type=$1&store_owner=$2 last;
}
location /review/ {
rewrite ^/review/([0-9] )$ /review.php?id=$1 last;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396819.html
