我在 debian wheezy 上有一个运行着 php5-fpm 的 nginx 服务器。我希望/var/www/devel/
我的开发文件夹位于http://devel.example.com
。在这个目录中,我有多个项目,例如/proj-1/
/proj-2/
/proj-2/
etc. - 其中一些需要使用 Wordpress。
现在,我意识到每个包含 Wordpress 的文件夹都必须添加一个单独的位置(如##SPE-LOC##
以下配置中标记)启用重写,又称漂亮的永久链接。
配置有效,但令我烦恼的是,我必须为所有包含 Wordpress 的文件夹添加单独的位置。我怎样才能避免这些重复的阻碍?
我的 nginx 配置:
server {
listen 80;
server_name devel.example.com;
root /var/www/devel;
index index.html index.php;
# Default location
location / {
#try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
##SPEC-LOC##
location /proj-1 {
try_files $uri $uri/ /proj-1/index.php?q=$uri&$args;
}
##SPEC-LOC##
location /proj-3/blog {
try_files $uri $uri/ /proj-3/blog/index.php?q=$uri&$args;
}
# PHP
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files
location ~ /\.ht {
deny all;
}
}
答案1
不可以,抱歉。
但是如果您想要的是增加可扩展性,即能够在不编辑 nginx 配置的情况下添加新项目,那么您可以实施稍微不同的方法。
在与 nginx 配置相同的目录中创建一个文件夹。为了便于举例,我将使用以下名称项目配置。我的 nginx.conf 位于,/usr/local/etc/nginx/nginx.conf
因此我只需创建/usr/local/etc/nginx/project_configs
。
您不需要重复位置块,只需将其添加include project_configs/*.conf
到 nginx 配置中,然后为每个项目创建一个新文件project_configs
并在其中写入位置块。
你的 nginx 配置应该如下所示:
server {
listen 80;
server_name devel.example.com;
root /var/www/devel;
index index.html index.php;
# Default location
location / {
#try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
}
#Include all of the project configs.
include project_configs/*.conf;
# PHP
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files
location ~ /\.ht {
deny all;
}
}
你可以添加任意数量的配置项目配置。它们应该看起来像这样:
项目-1.conf
location /proj-1 {
try_files $uri $uri/ /proj-1/index.php?q=$uri&$args;
}
项目-3.conf
location /proj-3/blog {
try_files $uri $uri/ /proj-3/blog/index.php?q=$uri&$args;
}
这样,您可以添加任意数量的项目,而无需修改 nginx 配置,也不会有混乱的配置。
希望有所帮助。
答案2
这可能不是最干净或最明智的解决方案,但我希望根据您列出的用例,以下方法能够起作用......
# Default location
location / {
try_files $uri $uri/ $uri/index.php?q=$uri&$args;
}
根据您的实施,您可能需要额外的
/index.php?q=$uri&$args
缺点是它可能会破坏任何不使用 Wordpress 的查询字符串来制作漂亮的 URl 的项目。