我想要实现的目标非常简单:
如果子域名以admin
开头,请尝试直接从控制器admin.php
投放所有其他案例,尝试使用site.php
投放文件。
请注意,由于许多域名都指向我们,因此我不了解域名。 到目前为止我尝试了什么:
server {
listen 8080;
root /path/to/current/web;
location / {
if ($http_host ~ "^admin") {
try_files $uri @rewriteadmin;
}
if ($http_host !~ "^admin") {
try_files $uri @rewriteapp;
}
}
location @rewriteapp {
rewrite ^(.*)$ /site.php/$1 last;
}
location @rewriteadmin {
rewrite ^(.*)$ /admin.php/$1 last;
}
...
}
当然这个设置不起作用,并且给了我:[emerg] "try_files" directive is not allowed here
。
实现这一目标的最佳做法是什么?
答案 0 :(得分:2)
您可以在server_name
中使用正则表达式。因此,最好使用两个服务器块。
server {
listen 8080 default_server;
root /path/to/current/web;
location / {
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /site.php/$1 last;
}
...
}
server {
listen 8080;
server_name ~^admin;
# or better, if they all starts with "admin." token
# server_name admin.*;
root /path/to/current/web;
location / {
try_files $uri @rewriteadmin;
}
location @rewriteadmin {
rewrite ^(.*)$ /admin.php/$1 last;
}
...
}
答案 1 :(得分:0)
快速解答:try_files
必须位于location
内。
快速修复:
location / {
try_files $uri $uri/ /index.php?$args;
}
适用于我的CakePHP v 3.x