nginx 重写 url 遗漏了一些东西
nginx rewrite url missing something
我的根目录下有多个动态url,需要这样写。例如
https://mv.test/review/4
https://mv.test/investment-banker/banking-products--004
1st url /Reviews/ 运行良好,但 2nd url 将转到 404 页。我不明白为什么它不起作用。
位置块
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
}
location @extensionless-php {
rewrite ^(.*)$ .php last;
}
location /review/ {
rewrite "^/review/([0-9]+)$" /review.php?id= last;
}
location /store/ {
rewrite "^/(.*)/(.*)$" /store.php?store_type=&store_owner= last;
}
很明显https://example.com/investment-banker/banking-products--004
不匹配location /store/
,所以会默认location
处理,即location /
.
您想将 https://foo/bar
重写为 /store.php?store_type=foo&store_owner=bar
,因为 foo/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 ^(.*)$ .php last;
}
rewrite ^/([^/]+)/([^/]+)$ /store.php?store_type=&store_owner= last;
}
location /review/ {
rewrite ^/review/([0-9]+)$ /review.php?id= last;
}
我的根目录下有多个动态url,需要这样写。例如
https://mv.test/review/4
https://mv.test/investment-banker/banking-products--004
1st url /Reviews/ 运行良好,但 2nd url 将转到 404 页。我不明白为什么它不起作用。
位置块
location / {
try_files $uri $uri.html $uri/ @extensionless-php;
}
location @extensionless-php {
rewrite ^(.*)$ .php last;
}
location /review/ {
rewrite "^/review/([0-9]+)$" /review.php?id= last;
}
location /store/ {
rewrite "^/(.*)/(.*)$" /store.php?store_type=&store_owner= last;
}
很明显https://example.com/investment-banker/banking-products--004
不匹配location /store/
,所以会默认location
处理,即location /
.
您想将 https://foo/bar
重写为 /store.php?store_type=foo&store_owner=bar
,因为 foo/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 ^(.*)$ .php last;
}
rewrite ^/([^/]+)/([^/]+)$ /store.php?store_type=&store_owner= last;
}
location /review/ {
rewrite ^/review/([0-9]+)$ /review.php?id= last;
}