nginx的新手并且遇到了一些重写问题。
我有一个链接到子域test.mydomain.com的网站。 我目前的nginx配置:
server {
listen 80 default_server;
root /test/public;
index index.html index.htm index.php;
server_name localhost;
access_log /var/log/nginx/localhost.laravel-access.log;
error_log /var/log/nginx/locahost.laravel-error.log error;
charset utf-8;
location /admin/ {
alias /test/public/admin/public/;
try_files $uri $uri/ /admin/index.php?$query_string;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }
error_page 404 /index.php;
include hhvm.conf; # The HHVM Magic Here
# Deny .htaccess file access
location ~ /\.ht {
deny all;
}
}
以下是(默认)hhvm.conf
的内容location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
我访问test.mydomain.com,一切正常。
然而!我在test.mydomain.com/admin上也有一个管理面板。所有要求
应将test.mydomain.com/admin/*
重写为/test/public/admin/public/*
,
而是使用我当前的配置,它们都被重写为public / index。
我的文件夹结构看起来有点像这样:
/test
/admin
project.stuff
/public
index.php
etc.php
/public
index.php
etc.php
MAJOR EDIT
我在hhvm.conf中添加了以下条件:
if ($request_uri ~* /admin) {
root /test/admin/public;
}
/ admin请求现在会相应地重写。 nginx文档声明如果两个位置模式匹配,则只使用最简单的一个(排序)。现在剩下的就是不仅可以使用.hh和.php文件,还可以使用资产文件(js,css,jpg等)。
我认为类似的东西就足够了但遗憾的是它没有:
location ~ \.(js|css)$ {
if ($request_uri ~* /admin) {
root /test/admin/public;
}
}
答案 0 :(得分:3)
root
指令可以在location {}
中使用,因此在您的情况下,配置可能如下所示:
server {
listen 80 default_server;
server_name localhost;
index index.html index.htm index.php;
try_files $uri $uri/ =404;
...
location / {
root /test/public;
...
}
location /admin/ {
root /test;
...
}
}
http://nginx.org/en/docs/http/ngx_http_core_module.html#root
次要更新:
我已将try_files $uri $uri/ index.php?$query_string;
替换为try_files $uri $uri/ =404
,因为对我来说似乎更合乎逻辑,因为index index.html index.htm index.php
就在这里。
这是基于您目前提供的信息的正确配置版本:
server {
listen 80 default_server;
server_name localhost;
root /test/public;
index index.html index.htm index.php;
...
location / {
try_files $uri $uri/ /index.php?$query_string;
...
}
location /admin/ {
alias /test/public/admin/public/;
try_files $uri $uri/ /admin/index.php?$query_string;
...
}
}
但是,根据您的声明,在您将root
移动到location
后,您的常规网站停止工作,可以断定您没有提供所有必需的信息,并且还有其他错误在您的配置中,这就是为什么我要求您在完整 nginx配置中附加您的问题,这将使我们双方的生活更加轻松......
这最终适合你:
server {
listen 80 default_server;
root /test/public;
index index.html index.htm index.php;
server_name localhost;
access_log /var/log/nginx/localhost.laravel-access.log;
error_log /var/log/nginx/locahost.laravel-error.log error;
charset utf-8;
location /admin/ {
alias /test/admin/public/;
try_files $uri $uri/ /admin/index.php?$query_string;
include hhvm.conf;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
include hhvm.conf;
}
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }
error_page 404 /index.php;
# Deny .htaccess file access
location ~ /\.ht {
deny all;
}
}
<强>更新强>
您可能还需要在hhvm.conf
文件和fastcgi_params
文件中替换此行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
以下内容:
fastcgi_param SCRIPT_FILENAME $request_filename;