我似乎无法弄清楚这个 nginx url 重写。
这就是我需要的
网址如下:
/经理/
/经理/仪表板
/经理/会话
/经理/查看
这些按顺序映射到:
/管理器/index__cms.php
/管理器/index__cms.php
/manager/dashboard__cms.php
/manager/session__cms.php
/manager/view__cms.php
还:
/manager/js/module - 映射到 - /manager/js/module_js.php
/manager/js/index - 映射到 - /manager/js/index_js.php
我会重命名这些文件,但之前的程序员使用这些 URL 映射将所有内容都映射出来。并且该程序之前在 apache 上,现在在 nginx 上。
我目前拥有的是:
location /manager {
index index__cms.php;
rewrite ^(.*)\__cms.php break;
}
解决方案:
我做了以下事情。虽然不太美观,但确实有效。
location /manager {index index__cms.php; try_files $uri $uri/ /manager/index__cms.php$is_args$args;}
location /manager/dashboard {try_files $uri $uri/ /manager/index__cms.php$is_args$args;}
location /manager/session {try_files $uri $uri/ /manager/session__cms.php$is_args$args;}
有 20 多个文件,这比创建动态方法要简单得多。需要这个的代码在不久的将来就会退役,所以它不需要很漂亮,因为它会和支持它的配置一起被删除。
答案1
类似这样的事情可能会有用:
map $uri $remapped_uri {
default $uri;
~^/manager/([^/]+)$ /manager/$1__cms.php;
~^/manager/js/([^/]+)$ /manager/js/$1_js.php;
}
server {
...
location /manager/ {
index index__cms.php;
rewrite .* $remapped_uri last;
}
}
但是,请求yourdomain.com/manager/js/
转到是否正确yourdomain.com/manager/js/index__cms.php
?如果不是,并且 的正确索引文件yourdomain.com/manager/js/
是index_js.php
,下面是另一个示例:
map $uri $remapped_uri {
default $uri;
/manager/ /manager/index__cms.php;
~^/manager/([^/]+)$ /manager/$1__cms.php;
/manager/js/ /manager/js/index_js.php;
~^/manager/js/([^/]+)$ /manager/js/$1_js.php;
}
server {
...
location /manager/ {
rewrite .* $remapped_uri last;
}
}
作为/manager
,:/manager/js
/manager/
/manager/js/
map $uri $remapped_uri {
default $uri;
~^/manager/?$ /manager/index__cms.php;
~^/manager/([^/]+)$ /manager/$1__cms.php;
~^/manager/js/?$ /manager/js/index_js.php;
~^/manager/js/([^/]+)$ /manager/js/$1_js.php;
}
server {
...
location /manager {
rewrite .* $remapped_uri last;
}
}
也可以看看这回答。